c++ - 如何打印类方法返回的值
问题描述
我在打印类方法返回的值时遇到问题。在 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;
解决方案
您正在尝试打印 a DataClass
,而不是它的成员。对于此类,您尚未指定如何打印它(通过重载<<
运算符)。这就是编译器所抱怨的。
你想要的大概是
cout << listEntryInstance.getDataClass().getDataMember();