2017-01-05 133 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”并在其中定义它,问题就解决了。如果有人知道为什么这个解决了这个错误,我会很感激他们是否会向我解释这个错误,以便我不会再犯同样的错误。 :-)