2016-11-07 55 views
-1

我无法打印列表对象的实际内容。当我使用std :: cout < < myList;我得到一个编译器错误说错误:'操作符< <'(操作数类型是'std :: ostream {aka std :: basic_ostream}'和'List')不匹配C++问题COUT只在内存中打印位置?

当我使用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; 
} 
+11

您是否为'List'定义了'operator <<'? – NathanOliver

+3

你在哪里告诉计算机如何打印“List”? –

+0

给你一些东西给谷歌,“操作符重载” – UKMonkey

回答

2

您需要定义操作“< <”你“名单”的复合型运算符重载函数:

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

    return os; 
} 

你的例子使用

std::cout<< &myList; 

仅仅因为'& myList'是指针类型,并且标准已经定义了操作符'< <',这显然打印了一个内存地址到标准输出。