如何返回对象C ++的数组[重复]
Posted
技术标签:
【中文标题】如何返回对象C ++的数组[重复]【英文标题】:How to return an array of object C++ [duplicate] 【发布时间】:2020-10-31 05:52:56 【问题描述】:所以,我遇到了这个问题。 基本上,我创建了一个包含字符串的类,然后创建了一个函数,该函数创建了一个包含该字符串的类的数组,我想将它返回给 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;
【问题讨论】:
您可以使用std::vector
吗?
使用 std::vector。打开警告(编译器可能会告诉你为什么不能这样做)
不要使用C
,而是使用C++
。所以改为使用 C 数组 std::array
或 std::vector
。
wordBank
在函数结束时停止存在,就像函数本地的所有其他变量一样。您返回的指针不再特别指向任何东西。
【参考方案1】:
最简单的解决方案是使用std::vector<wordList>
。数组是一个构建块 - 简单但不是很方便。
【讨论】:
我讨厌不加解释地拒绝投票,即使我不是受害者。 不是反对者,但要小心counter-voting。【参考方案2】: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;
【讨论】:
我不知道为什么我们会永久回答重复... 似乎有人否决了所有答案,因为这是一个经常重复的问题。 @Klaus 选择的重复答案建议将数组作为指针返回。它已经严重过时了,大多数人宁愿在这个时代建议 std::vector @Jeffrey:这个问题有很多重复的地方,也有更好的地方。我同意有必要对此类重复的重复项进行排序,但我不同意再次回答是更好的解决方案。 @Jeff 公平地说,*** 格式规定最好将其发布在欺骗目标本身以使其保持最新,而不是永远丢失的欺骗。这里的问题是,当我回答时,这个问题没有被标记为欺骗,所以我只是不知道。【参考方案3】:你不能返回一个数组。你可以返回一个指针(指向数组的开头),但是你会遇到问题,因为数组的生命周期只是函数范围。
正确的方法是使用std::vector
。
std::vector<wordList> wordBank(3);
它的行为就像一个数组,可以按值返回。
【讨论】:
以上是关于如何返回对象C ++的数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章