C ++问题仅COUT在内存中打印位置?

时间:2016-11-07 17:18:53

标签: c++

我无法打印列表对象的实际内容。当我使用std :: cout<<我的列表;我收到编译错误,说错误:'operator<<'不匹配(操作数类型是'std :: ostream {aka std :: basic_ostream}'和'List')

当我使用std :: cout<< &安培; myList中;但它只打印内存中的位置。以下是我的主要文件。我还包括我定义的运算符重载函数

//main.cpp
#include <iostream>
#include "list.h"
#include "loadfile.h"
#include "book.h"

int main( int argc, const char * argv[] ) {
List myList;
load_book_data("test_subset.tsv", myList);
List & myI = myList;
std::cout<<myList;
return 0;
}

// operator overloading, this is from a book.cpp
std::ostream& operator<<(std::ostream & os, const Book & b)
{
os<<b.isbn()<<'\t'<<b.title()<<'\t'<<b.author()<<'\t'<<b.year()<<'\t'<<b.rating();
return os;
}

1 个答案:

答案 0 :(得分:2)

您需要定义运算符'&lt;&lt;'对于'List'复合类型:

std::ostream& operator<<(std::ostream& os, const List& obj)
{
    std::cout << obj.someListField << std::endl;

    return os;
}

您的示例适用于

std::cout<< &myList;

只是因为'&amp; myList'是指针类型,标准已经定义了运算符'&lt;&lt;'为此,显然将内存地址打印到stdout。