2017-01-05 62 views
1

我在這裏遇到的問題是class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Sadrzaj const &)。我在互聯網上搜索了很多方面的解決方案,但找不到它。當我嘗試在主源文件中包含Data.h時,會出現此問題,Content.h也是如此。下面是兩個頭文件供參考。任何幫助都非常感謝。 :-)C++中的模板問題

#pragma once 
#include <iostream> 

class Content 
{ 
    friend std::ostream& operator<<(std::ostream &str, const Content&); 
public: 
    virtual void print(std::ostream&) const = 0; 
}; 

std::ostream& operator<<(std::ostream &str, const Content& temp) 
{ 
    temp.print(str); 
    return str; 
} 

#pragma once 
#include "Content.h" 

template <class T> 
class Data: public Content 
{ 
public: 
    Data(const T&); 
    void print(std::ostream&) const override; 
private: 
    T data; 
}; 

template <class T> 
Data<T>::Data(const T& data) : data(data) {} 

template <class T> 
void Data<T>::print(std::ostream& str) const { str << data; } 
+0

您是否從編譯器收到錯誤消息?添加錯誤消息的**精確**文本。 –

+0

你得到了什麼*確切*錯誤?另外,嘗試用英語進行編程,因爲這就是每個人都可以做的事情,因此向任何人請求,給予和接受幫助會更容易。 – rubenvb

+0

'friend std :: ostream&Sadrzaj :: operator <<'沒有意義。也許刪除'Sadrzaj ::'部分 –

回答

0

好,所以問題是,< <經營者在「Content.h」頭文件中定義。只需創建一個新的源文件「Content.cpp」並在其中定義它,問題就解決了。如果有人知道爲什麼這個解決了這個錯誤,我會很感激他們是否會向我解釋這個錯誤,以便我不會再犯同樣的錯誤。 :-)