gpt4 book ai didi

c++ - 运算符重载 C++; << 操作的参数太多

转载 作者:可可西里 更新时间:2023-11-01 16:29:17 25 4
gpt4 key购买 nike

我在下面有一些代码,可以获取一些姓名和年龄,并用它们做一些事情。最终它会将它们打印出来。我需要更改我的 print()具有全局功能 operator<< .我看到了on a different forum<<operator需要两个参数,但是当我尝试它时,我得到一个“<<操作错误的参数太多。我做错了什么吗?我是 C++ 的新手,我真的不明白运算符重载的意义。

#include <iostream>;
#include <string>;
#include <vector>;
#include <string.h>;
#include <fstream>;
#include <algorithm>;

using namespace::std;

class Name_Pairs{
vector<string> names;
vector<double> ages;

public:
void read_Names(/*string file*/){
ifstream stream;
string name;

//Open new file
stream.open("names.txt");
//Read file
while(getline(stream, name)){
//Push
names.push_back(name);
}
//Close
stream.close();
}

void read_Ages(){
double age;
//Prompt user for each age
for(int x = 0; x < names.size(); x++)
{
cout << "How old is " + names[x] + "? ";
cin >> age;
cout<<endl;
//Push
ages.push_back(age);
}

}

bool sortNames(){
int size = names.size();
string tName;
//Somethine went wrong
if(size < 1) return false;
//Temp
vector<string> temp = names;
vector<double> tempA = ages;
//Sort Names
sort(names.begin(), names.end());

//High on performance, but ok for small amounts of data
for (int x = 0; x < size; x++){
tName = names[x];
for (int y = 0; y < size; y++){
//If the names are the same, then swap
if (temp[y] == names[x]){
ages[x] = tempA[y];
}
}
}
}

void print(){
for(int x = 0; x < names.size(); x++){
cout << names[x] << " " << ages[x] << endl;
}
}

ostream& operator<<(ostream& out, int x){
return out << names[x] << " " << ages[x] <<endl;
}
};

最佳答案

您正在重载 <<运算符作为成员函数,因此,第一个参数隐式是调用对象。

您应该将其重载为 friend功能或作为自由功能。例如:

重载为 friend功能。

friend ostream& operator<<(ostream& out, int x){
out << names[x] << " " << ages[x] <<endl;
return out;
}

但是,规范的方法是将其重载为 free功能。您可以从这篇文章中找到非常好的信息:C++ operator overloading

关于c++ - 运算符重载 C++; << 操作的参数太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16291623/

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