编译多个c++,获取未初始化的vector
Compiling Multiple C++, getting uninitialized Vectors
与其将所有代码放在一个大文件中,不如将其拆分为多个文件。这个想法是在另一个文件(World.cpp)中有一个结构体向量(Thing),并且能够从Main.cpp访问它们。以下是相关代码:
World.h:
#include <vector>
#include "Lab4.h"
using namespace std;
struct Thing {
glm::vec3 pos;
};
void InitWorld();
void addThingToWorld(glm::vec3 Position);
Thing getThingAtIndex(int index);
World.cpp:
#include "World.h"
vector<Thing> world;
void InitWorld() {
Thing t;
t.pos = glm::vec3 (0.5, 0.0, 0.0);
world.push_back(t);
}
void addThingToWorld(glm::vec3 Position) {
Thing t;
t.pos = Position;
world.push_back(t);
}
Thing getThingAtIndex(int index) {
world.at(index);
}
Main.cpp:
#include "Lab4.h"
void main() {
InitWorld();
Thing t = getThingAtIndex(0);
prinf("%f %f %fn", t.pos.x, t.pos.y, t.pos.z);
}
问题是main输出的值要么是垃圾,要么全是零。如果我把它放在一个文件中,代码工作得很好。我花了几个小时想这个问题,但还是想不明白。我想要一个关于为什么"world"向量不打印出"0.5 0.0 0.0"的解释。
没有返回任何内容
Thing getThingAtIndex(int index) {
world.at(index);
} // returns garbage !!
请更正:
Thing getThingAtIndex(int index) {
return world.at(index);
} // now returns something
相关文章:
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 为什么std::vector和std::valarray初始化构造函数不同
- 初始化 std::vector 替换为单大括号而不是双大括号
- 使用大括号初始化 std::vector 使用初始值设定项列表
- 为什么初始化 std::vector 时不能使用模板整数?
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 分别声明和初始化 vector<vector<int>>
- 如何使用字符串文字优雅地初始化 vector<char *>?
- 如何初始化Vector
- 是否可以用map中的键初始化vector ?
- 初始化vector时出错
- 在c++中初始化vector类成员
- 在结构体中初始化vector
- 初始化vector常量数组
- 如何在类模板的构造函数中初始化vector成员变量
- 使用重复push_back()初始化vector时的问题
- 在struct vector中初始化vector
- 初始化Vector迭代器
- 没有匹配的构造函数,用于使用 CLANG++ 3.2 初始化'vector<string>'
- 初始化vector类型的静态类成员