gpt4 book ai didi

c++ - 为什么我会收到此错误 : nomatch for 'operator<<' in C++?

转载 作者:太空宇宙 更新时间:2023-11-04 16:04:11 25 4
gpt4 key购买 nike

请帮助我解决为什么我在提到评论人员时遇到错误。我真的被困在这里了!我还应该提供哪些其他详细信息?

main.cpp

#include <iostream>
#include<person.h>
#include <sstream>

int main()
{
cout << "Constructor Overloading Demo !!!" << endl;
person vish;
cout << vish.toString() << endl; /* I get an error for this statement though I feel this is correct */
return 0;
}

person.cpp//构造函数定义文件

#include "person.h"
#include <sstream>

person::person()
{
name = "vish";
age = 25;
//ctor
}

void person::toString()
{
stringstream st;
st << "Name: ";
st << name;
st << "& Age: ";
st << age;
prnt = st.str();
cout << prnt << endl;
//return 10;
}

person.h//构造函数声明

#ifndef PERSON_H
#define PERSON_H
#include<iostream>
using namespace std;
class person
{
public:
person();
void toString();

//virtual ~person();
protected:
private:
string name;
int age;
string prnt;
};

#endif // PERSON_H

最佳答案

作为方法的名称 person::toString()建议它应该返回 string , 不是 void (这意味着该方法不返回任何内容):

class person { 
...
std::string toString();
//^--------- type should be changed

当然,您需要相应地更改该方法的实现:

std::string person::toString()
{
stringstream st;
st << "Name: ";
st << name;
st << "& Age: ";
st << age;
return st.str();
}

I realize that my function was returning void. but my question is: why does that matter ?

你的输出到cout这是:

cout << vish.toString(); // endl is omitted for clarity

等于以下之一:

cout.operator<<( vish.toString() );
operator<<( cout, vish.toString() );

任何可用的。这意味着函数或方法 operator<<需要调用 toString() 的结果它不能接受 void .如果您只想从方法 toString() 打印写:

vish.toString();

那会工作得很好(除了方法名称仍然会令人困惑,但编译器不关心)。

关于c++ - 为什么我会收到此错误 : nomatch for 'operator<<' in C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38381614/

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