[英]Why am I getting this error: nomatch for 'operator<<' in C++?
請幫我解決為什么我在提到評論員的地方出錯了。 我真的被困在這里! 我還應該提供哪些其他詳細信息?
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();
}
我意識到我的函數正在返回void。 但是我的問題是:為什么這很重要?
您對cout
輸出是這樣的:
cout << vish.toString(); // endl is omitted for clarity
等於以下之一:
cout.operator<<( vish.toString() );
operator<<( cout, vish.toString() );
任何可用的。 這意味着函數或方法operator<<
需要調用toString()
結果,並且不能接受void
。 如果只想從方法toString()
打印,請編寫:
vish.toString();
可以正常工作(除非方法名仍然令人困惑,但編譯器不在乎)。
operator <<期望將一個字符串傳遞給它。 您的ToString函數返回void
string person::toString()
{
stringstream st;
st << "Name: ";
st << name;
st << "& Age: ";
st << age;
return st.str();
}
編輯:
該聲明
std::cout << vish.toString();
與...相同
std::cout.operator<<(vish.toString());
操作員的原型是
std::ostream& operator<<(std::string);
std::ostream& operator<<(int);
//...
該函數需要一個字符串或其他參數作為參數。 您的功能定義為獨立的打印功能。 因此,應按上述說明對其進行修改或對其進行單獨調用。
函數名稱“ toString()”表示該函數返回該對象的字符串表示形式,該對象可以用於任何用途,而不僅僅是打印,因此應返回一個字符串。 如果函數打印對象,則應將其稱為“ print”而不是“ toString”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.