2017-01-05 5 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 и определив его там, проблема была решена. Если кто-нибудь знает, почему это решило ошибку, я был бы очень признателен, если бы мне это объяснили, чтобы я не повторил ту же ошибку. :-)