所以,我遇到了这个问题。 基本上,我创建了一个包含字符串的类,然后创建了一个函数,该函数为该类创建了一个包含字符串的数组,我想将它返回到main(),但只需返回WordBank[]; 不管用。 有人能给我解释一下为什么我的代码不工作以及我需要做什么才能让它工作吗? 对不起,我是C++的新手。 谢谢,下面是代码:
#include <iostream>
#include <fstream>
using namespace std;
// wordlist object
class wordList {
public:
string word;
};
// function that is supposed to fill my wordList class object with words
wordList* readWordList() {
wordList wordBank[3];
string wlist = "wordlist.txt";
ifstream data(wlist);
while (!data.eof()) {
for (int i = 0;i < 3;i++) {
data >> wordBank[i].word;
}
}
data.close();
return wordBank;
}
//main function
int main()
{
wordList wordBank[2];
wordBank = *readWordList() ; // ?
std::cout << wordBank[2].word;
}
WordBank
是ReadWordList()
函数的本地函数。 因此,一旦该函数结束,wordbank
和它所拥有的所有内存就不再属于您。 换句话说,您正在通过尝试查看返回的内容来调用未定义的行为。
相反,我建议您简单地使用一个向量:
std::vector<wordList> readWordList() {
std::vector<wordList> wordBank(3);
string wlist = "wordlist.txt";
ifstream data(wlist);
while (!data.eof()) {
for (int i = 0;i < 3;i++) {
data >> wordBank[i].word;
}
}
data.close();
return wordBank;
}
最简单的解决方案是使用std::vector
。 数组是一个构建块--简单但不是很方便。
不能返回数组。 您可以返回一个指针(指向数组的开头),但这样就会遇到问题,因为数组的生存期只是函数作用域。
正确的方法是使用std::vector
。
std::vector<wordList> wordBank(3);
它的行为类似于数组,可以按值返回。