编译多个 C++,获取未初始化的向量
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 %f\n", t.pos.x, t.pos.y, t.pos.z);
}
问题是从 main 打印出的值要么是垃圾,要么全是零。如果我把代码放在一个文件中,它就可以正常工作。我已经在这上面花了几个小时,但我无法弄清楚。我想解释为什么 "world" 向量没有打印出“0.5 0.0 0.0”。
您在
中没有 return 任何内容
Thing getThingAtIndex(int index) {
world.at(index);
} // returns garbage !!
请更正:
Thing getThingAtIndex(int index) {
return world.at(index);
} // now returns something
我不是将所有代码都放在一个巨大的文件中,而是将其拆分为多个文件。这个想法是在另一个文件 (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 %f\n", t.pos.x, t.pos.y, t.pos.z);
}
问题是从 main 打印出的值要么是垃圾,要么全是零。如果我把代码放在一个文件中,它就可以正常工作。我已经在这上面花了几个小时,但我无法弄清楚。我想解释为什么 "world" 向量没有打印出“0.5 0.0 0.0”。
您在
中没有 return 任何内容Thing getThingAtIndex(int index) {
world.at(index);
} // returns garbage !!
请更正:
Thing getThingAtIndex(int index) {
return world.at(index);
} // now returns something