2016-09-10 67 views
-1

有我的重载< <运营商的问题,cygwin的是返回2个错误,C++未定义参考重载操作

DeckOfCardsDemo.o:DeckOfCardsDemo.cpp:(.text+0xd3): undefined reference to `samuel::operator<<(std::ostream&, samuel::DeckOfCards const&)' 

    DeckOfCardsDemo.o:DeckOfCardsDemo.cpp:(.text+0xd3): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `samuel::operator<<(std::ostream&, samuel::DeckOfCards const&)' 

这是我在DeckOfCards.cpp

功能
std::ostream& operator << (std::ostream& out, DeckOfCards& card) 
    { 
     return out << card.value() << " "; 
    } 

声明

friend ostream& operator << (ostream& out, const DeckOfCards& card); 

和我的DeckOfCardsDemo.cpp

#include <iostream> 
    #include <cstdlib> 
    #include <ctime> 
    #include "DeckOfCards.h" 
    using namespace std; 
    using namespace samuel; 

    int main(int argc, char* argv[]) { 

    if (argc >= 2) { 

     int seed = atoi(argv[1]);  
    } 
    else { 
     int seed = time(NULL); 
     srand(seed); 
    } 
    DeckOfCards* deck = new DeckOfCards(); //creating a deck 
    cout << deck->value() << endl; //printing deck 
    cout << *deck << endl; 


    return EXIT_SUCCESS; 


} 
+0

你的问题的回答是重复特别是在[这个答案](http://stackoverflow.com/questions/12573816/什么 - 是 - 一 - 未定义参考悬而未决,外部符号错误和如何-DO-I-修复/ 12574403#12574403)。 –

回答

0

上式的第二个参数的收费attantion

 DeckOfCards& card 

 DeckOfCards const& card 

是不同的类型。

所以,检查operator <<声明(不幸的是,我们不能看它是怎么申报)

+0

我的不好,我宣布它为朋友ostream&operator <<(ostream&out,const DeckOfCards&card); – Riggy