簡體   English   中英

為什么將我的打印方法與std :: cout一起使用會導致錯誤?

[英]Why does using my print method with std::cout result in an error?

#include <iostream>

using namespace std;

class Fam
{
    public:
        char you, urmom, urdad;
        void addPerson(char y, char m, char f)
        {
            you = y;
            urmom = m;
            urdad = f;
        }
};

class Tree: public Fam
{
    public:
        void showFamtree()
        {
            cout<< "Name: " << you << endl;
            cout<< "Mother's name: " << urmom <<endl;
            cout<< "Father's name: " << urdad <<endl;
        }
};

int main(void)
{
    Tree tree;

    char a,b,c;
    cin >> a;
    cin >> b;
    cin >> c;

    tree.addPerson(a,b,c);

    cout<< "Family tree: " << tree.showFamtree() <<endl;

    return 0;    
}

我想用該人的名字,母親的名字,父親的名字打印家譜,但是當我編譯它時,出現以下錯誤:

二進制表達式的無效操作數( basic_ostream<char, std::char_traits<char> >void

tree.showFamtree()返回任何內容(即void ),嘗試將其傳遞給std::cout沒有任何意義。 你可能會改變

cout<< "Family tree: " << tree.showFamtree() <<endl;

cout << "Family tree: " << endl;
tree.showFamtree();

如果您這樣定義operator <<

ostream& operator << ( ostream & ostr , const Tree & t ){
    ostr << "Name:" << t.you << endl
        << "Mother's name:" << t.urmom << endl
        << "Father's name:" << t.urdad << endl;
    return ostr;
}

那么你可以使用

cout<< "Family tree: " << tree <<endl;

這在C ++中稱為運算符重載

要使用與此類似的東西:

void showFamtree()
{
    cout<< "Name: " << you << endl;
    cout<< "Mother's name: " << urmom <<endl;
    cout<< "Father's name: " << urdad <<endl;
}

與:

cout << "Family tree: " << tree.showFamtree() << endl;

一種C ++方法是使用std :: stringstream,如下所示:

std::string showFamtree()
{
    std::stringstream ss;
    ss << "Name: " << you << endl;
    ss << "Mother's name: " << urmom <<endl;
    ss << "Father's name: " << urdad <<endl;
    return (ss.str());
}

我也經常添加標簽。 所以考慮使用

std::string showFamtree(std::string label)
{
    std::stringstream ss;
    ss << label;
    ss << "Name: " << you << endl;
    ss << "Mother's name: " << urmom <<endl;
    ss << "Father's name: " << urdad <<endl;
    return (ss.str());
}

並將調用更改為

cout << tree.showFamtree("Family tree: ") << endl;

注意-也許標簽應該在自己的行上,以便在“樹”的左側保持一致的空白。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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