编译多个 C++,得到未初始化的向量

Posted

技术标签:

【中文标题】编译多个 C++,得到未初始化的向量【英文标题】:Compiling Multiple C++, getting uninitialized Vectors 【发布时间】:2015-05-23 21:47:05 【问题描述】:

我没有将所有代码放在一个巨大的文件中,而是将其拆分为多个文件。这个想法是在另一个文件 (World.cpp) 中有一个结构向量 (Thing),并且能够从 Main.cpp 访问它们。下面是相关代码:

世界.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);

世界.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 打印出来的值要么是垃圾,要么全为零。如果我将它放在一个文件中,则该代码可以正常工作。我已经花了几个小时在这上,但我无法弄清楚。我想解释一下为什么“世界”向量不打印出“0.5 0.0 0.0”。

【问题讨论】:

请给我们真实的代码。 initWorld() 不调用函数InitWorld() Thing t = new Thing(); 不会编译。 你为什么不考虑封装你的世界向量? 你还有错别字,t.Position...,getThingAtIndex函数没有返回。 试试看。返回 world.at(index); 【参考方案1】:

你没有返回任何东西

Thing getThingAtIndex(int index) 
   world.at(index);
   // returns garbage !!

请更正:

Thing getThingAtIndex(int index) 
   return world.at(index);
   // now returns something 

【讨论】:

原来如此,非常感谢!我最近一直在使用另一种不需要返回语句的语言,所以我下意识地忘记了。

以上是关于编译多个 C++,得到未初始化的向量的主要内容,如果未能解决你的问题,请参考以下文章

编译类型向量类的私有成员时出错 - C++ [重复]

C++ 向量初始容量

在 C++ 中初始化非常大的向量

C ++中未初始化的内存分配

尝试初始化结构向量时出现编译错误

C++ 未初始化的结构成员 - 字段不存在