gpt4 book ai didi

c++ - 在容器中存储值

转载 作者:行者123 更新时间:2023-11-28 06:41:46 24 4
gpt4 key购买 nike

我正在尝试从文件中读取两个值并将它们存储在名为 God 的类中. God有两个数据成员,namemythology .我希望将值存储在 list<God> 中(神及其各自的神话)然后将它们打印出来。到目前为止,这是我的代码:

#include <iostream>
#include <fstream>
#include <list>
#include <string>

using namespace std;

class God {
string name;
string mythology;
public:
God(string& a, string& b) {
name=a;
mythology =b;
}
friend ostream& operator<<( ostream& os,const God&);
};

void read_gods(list<God>& s) {
string gname, gmyth;

//reading values from file
ifstream inFile;
inFile.open("gods.txt");

while(!inFile.eof()) {
inFile >> gname >> gmyth ;
s.push_back(God(gname, gmyth));
}
}

ostream& operator<<( ostream& os,const God& god) {
return os << god.name << god.mythology;
}

int main() {
//container:
list<God> Godmyth;
read_gods(Godmyth);

cout << Godmyth;

return 0;
}

例如,如果我用希腊语 Zeus 阅读,那么我将如何访问它们?

我收到的错误是:

error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'|

最佳答案

你应该写 operator <<或输出其数据成员的 God 类的一些成员函数。

例如

class God
{
public:
std::ostream & out( std::ostream &os ) const
{
return os << name << ": " << mythology;
}

//...
};

或者

class God
{
public:
friend std::ostream & operator <<( std::ostream &, const God & );

//...
};


std::ostream & operator <<( std::ostream &os, const God &god )
{
return os << god.name << ": " << god.mythology;
}

在这种情况下而不是无效的声明

cout << Godmyth << endl;

你可以写

for ( const God &god : Godmyth ) std::cout << god << std::endl;

或者,如果您只是想访问数据成员,那么您应该编写 getter。

例如

class God
{
public:
std::string GetName() const { return name; }
std::string GetMythology() const { return mythology; }
//...

关于c++ - 在容器中存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25837497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com