【发布时间】:2016-08-20 18:00:15
【问题描述】:
我有一个 txt 文件,它有一个流氓级别 我是这样加载的:
void File::LoadLevel()
{
ifstream input_file;
input_file.open("Level_1.txt");
if (input_file.fail())
{
perror("Level_1.txt");
}
while (input_file >> _level)
{
_level_instance.push_back(_level);
}
}
变量:
string _level;
vector<string> _level_instance;
我这样打印出来:
for (int i = 0; i < _level_instance.size(); i++)
{
cout << _level_instance[i] << endl;
}
效果很好。
但是我在另一个类中也有一个向量,我使用这样的 getter:
vector<string>GetlevelData(){ return _level_data; }
我从这里更改了 LoadLevel():
_level_instance.push_back(_level);
到这里:
Level Lvl;
Lvl.GetLevelData().pushback(_level);
我在“Level”类中创建了一个方法,将其打印到与以前相同的屏幕上 它编译但它没有打印出任何东西,为什么?
顺便说一句,在int main() 中执行了必要的方法,即来自File 类的OpenLevel() 和来自Level 类的Print()
编辑:
通过引用传递它并不起作用 这是 Level.h 中的两种方法:
void SetLevelData(const std::string &string) {
_level_data.push_back(string);
}
//Getters
vector<string>& GetlevelData(){ return _level_data; }
在 File.cpp 中:
void File::LoadLevel()
{
ifstream input_file;
Level lvl;
input_file.open("Level_1.txt");
if (input_file.fail())
{
perror("Level_1.txt");
}
while (input_file >> _level)
{
lvl.GetlevelData().push_back(_level);
}
}
它不起作用,它什么也不打印,即使我添加了“&” 当我在 Level.h 中使用 'push_back' 方法尝试时,结果是一样的 这是 int main() 以防万一:
int main()
{
File f;
Level lvl;
f.LoadLevel();
lvl.PrintLevel();
system("PAUSE");
return 0;
}
Level.cpp 中的 PrintLevel():
void Level::PrintLevel()
{
for (int i = 0; i < _level_data.size(); i++)
{
cout << _level_data[i] << endl;
}
}
【问题讨论】:
-
你打电话给
f.LoadLevel();,但f对main()中定义的lvl一无所知,那么为什么_level_data里面应该有任何东西在那个@里面987654341@?File中明显不同的实例lvl定义在哪里? -
@t.niese 因为我使用 GetLevelData().pushback(_level) 在 OpenLevel() 中设置了 '_level_data' 的值
-
在您的
main()中,您在此处显示lvl是Level的一个新实例,它不会在任何地方使用,因此主要调用lvl.PrintLevel不会显示任何内容,因为它的_level_data是空的。 -
@belkipAndroidness --
what should i do ?-- 你为什么选择以这种方式做事,你有两个不同的类,File和Level? (如果一个类“看起来像”另一个类并不重要,它们是不同的)。什么是目标/目的?这是你的设计,你需要弄清楚你真正想要做什么。 -
@belkipAndroidness 投票以“过于宽泛”而结束。
标签: c++ string class vector ifstream