如何打印通过类方法返回的值

How to print a value returned by a class method

本文关键字:类方法 返回 何打印 打印      更新时间:2023-10-16

我正在遇到麻烦,打印了由类方法返回的值。在数据级实例中,COUT Will 使用表单的语句打印DataMember(a int):

cout << dataClassInstance.getDataMember();

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

cout << listEntryInstance.getDataClass();

ListEntry使用其自己的GET函数,该函数调用Dataclass的GET函数返回相同的INT值,但它给出了一个错误:

[错误]"操作员&lt;&lt;''无匹配(操作数类型是 'STD :: BASIC_OSTREAM'和'DATACLESS')

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

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;

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

您想要的是

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

流插入运算符对dataclass

没有过多。
friend std::ostream &operator<<(std::ostream &out, const DataClass &dc) {
    out << dc.dataMember;
    return out;
}