2016-11-07 25 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'是指針類型,並且標準已經定義了操作符'< <',這顯然打印了一個內存地址到標準輸出。