编译多个c++,获取未初始化的vector

Compiling Multiple C++, getting uninitialized Vectors

本文关键字:初始化 vector 获取 c++ 编译      更新时间:2023-10-16

与其将所有代码放在一个大文件中,不如将其拆分为多个文件。这个想法是在另一个文件(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