簡體   English   中英

為什么會出現此錯誤:C ++中'operator <<'不匹配?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM