首页 > 解决方案 > 如何打印类方法返回的值

问题描述

我在打印类方法返回的值时遇到问题。在 DataClass 实例中,cout使用以下形式的语句打印 dataMember(一个 int):

cout << dataClassInstance.getDataMember();

但是,包含 DataClass 作为成员的 ListEntry 无法使用其自己的函数打印相同的值。表格是:

cout << listEntryInstance.getDataClass();

ListEntry 使用它自己的 get 函数,该函数调用 DataClass 的 get 函数以返回相同的 int 值,但它给出了一个错误:

[错误] 'operator<<' 不匹配(操作数类型为 'std::basic_ostream' 和 'DataClass')

任何关于我做错了什么的想法都将不胜感激。到目前为止,我似乎无法找到任何解决方案。

class DataClass 
{
    private:
    dataType dataMember;

    public:
    //default   
    DataClass() 
    {
        dataMember;  
    }

    //parameterized
    DataClass(dataType inputData)
    {
        dataMember = inputData;
    }

    //copy
    DataClass(const DataClass &inputData)
    {
        dataMember = inputData.dataMember;
    }

    //destructor
    ~DataClass() 
    {

    }

    //set
    void setData(dataType inputData)
    {
        dataMember = inputData;
    }

    //get
    dataType getDataMember()
    {
        return dataMember;
    }

};

class ListEntry
{
    private:
    DataClass data;
    ListEntry* nextEntryPtr;
    ListEntry* prevEntryPtr;

    public:
    //default
    ListEntry() : data()
    {

        nextEntryPtr = NULL;
        prevEntryPtr = NULL;
    }

    //parameterized
    ListEntry(const DataClass& inputData) : data(inputData) 
    {
        nextEntryPtr = NULL;
        prevEntryPtr = NULL;    
    }

    //copy
    ListEntry(const ListEntry& entryToCopy) : data(entryToCopy.data)
    {
        nextEntryPtr = NULL;
        prevEntryPtr = NULL;
    }

    //destructor
    ~ListEntry() 
    {

    }   

    //set
    void setDataClass(DataClass dataInput)
    {
        data.setData(dataInput.getDataMember());
    }

    void setNextEntry(ListEntry* entryPtr)
    {
        nextEntryPtr = entryPtr;
    }

    void setPrevEntry(ListEntry* entryPtr)
    {
        prevEntryPtr = entryPtr;
    }

    //get
    DataClass getDataClass()
    {
        return data.getDataMember();
    }

    ListEntry* getNextEntry()
    {
        return nextEntryPtr;
    }

    ListEntry* getPrevEntry()
    {
        return prevEntryPtr;
    }

};

我用来测试每​​个类的功能的代码示例。DataClass 给出了预期的结果,ListEntry 只给出了一个错误。

//STUB TEST FOR DATACLASS 
dataType constructTest = 42;

cout << "Creating DataClass with default constructor." 
     << endl;

DataClass defaultTestData; //default initialize

cout << "Value held in DataClass: " 
     << defaultTestData.getDataMember() 
     << endl << endl;



//STUB TEST FOR LISTENTRY

cout << "Creating list entry with default constructor." << endl;
ListEntry defaultEntry;

cout << "Value held in list entry:" 
     << defaultEntry.getDataClass() 
     << endl << endl;

标签: c++classmethodscout

解决方案


您正在尝试打印 a DataClass,而不是它的成员。对于此类,您尚未指定如何打印它(通过重载<<运算符)。这就是编译器所抱怨的。

你想要的大概是

cout << listEntryInstance.getDataClass().getDataMember();

推荐阅读