编译多个 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++,得到未初始化的向量的主要内容,如果未能解决你的问题,请参考以下文章