У меня есть код с несколькими ошибками, я не понимаю, как исправить вообще.Я спросил своего профессора и ТА, и безуспешно советовался с интернетом, не считая более точного понимания того, что означают ошибки.Насколько я могу судить, компилятор либо путает мой перегруженный оператор со встроенными операторами, либо вообще не распознает его как перегруженный оператор.
Я получаю следующие ошибки и предупреждения:
|| === Проект 4, Отладка === |\ project 4 \ forest.h | 13 | предупреждение: объявление друга 'Forest & operator + (Forest &, Forest &)' объявляет не шаблонную функцию |
\ project 4 \ forest.h | 13 | note: (ifэто не то, что вы хотели, убедитесь, что шаблон функции уже объявлен и добавьте <> после имени функции здесь) |
\ project 4 \ forest.h | 14 | предупреждение: объявление друга 'std:: ostream & operator << (std :: ostream &, const Forest &) 'объявляет не шаблонную функцию | </p>
\ project 4 \ forest.h | 15 | предупреждение: объявление друга' std :: istream & operator >>(std :: istream &, Forest &) 'объявляет не шаблонную функцию |
\ project 4 \ main.cpp || В функции' int main () ': |\ project 4 \ main.cpp | 21 | ошибка: неоднозначная перегрузка для 'operator >>' в 'файле >> intForest' |
c: \ программные файлы (x86) \ codeblocks \ mingw \ bin ..\ lib \ gcc \ mingw32 \ 4.4.1 \ include \ c ++ \ istream | 119 | примечание: кандидаты: std :: basic_istream <_CharT, _Traits> & std :: basic_istream <_CharT, _Traits> :: operator >> (std:: basic_istream <_CharT, _Traits> & (*) (std :: basic_istream <_CharT, _Traits> &)) [с _CharT = char, _Traits = std :: char_traits] |
c: \ программные файлы(x86) \ codeblocks \ mingw \ bin .. \ lib \ gcc \ mingw32 \ 4.4.1 \ include \ c ++ \ istream | 123 | note: std :: basic_istream <_CharT, _Traits> & std :: basic_istream <_CharT, _Traits> :: operator >> (std :: basic_ios <_CharT, _Traits> & (*) (std :: basic_ios <_CharT, _Traits> &)) [with _CharT = char, _Traits = std :: char_traits] |
c: \ program files (x86) \ codeblocks \ mingw \ bin .. \ lib \ gcc \ mingw32 \ 4.4.1 \ include \ c ++ \ istream | 130 | note: std :: basic_istream <_CharT, _Traits> &std :: basic_istream <_CharT, _Traits> :: operator >> (std :: ios_base & (*) (std :: ios_base &)) [with _CharT = char, _Traits = std :: char_traits] ||| === Сборка завершена: 1 ошибка, 3 предупреждения === |
Когда я пытаюсь скомпилировать свой код.Соответствующие сегменты кода:
(в файле forest.h)
template< typename NODETYPE > class Forest
{
public:
friend Forest<NODETYPE>& operator+(Forest<NODETYPE>&, Forest<NODETYPE>&);
friend ostream& operator<<(ostream&, const Forest<NODETYPE>&);
friend istream& operator>>(istream&, Forest<NODETYPE>&);
Forest();
Forest( const Forest& otherForest);
~Forest();
void nodes(int&) const;
private:
ForestNode<NODETYPE> *root;
ForestNode<NODETYPE> *getNewNode( const NODETYPE &);
};
(в файле forest.cpp)
template<typename NODETYPE> istream& operator>>(istream& file, const Forest<NODETYPE>& f1)
{
istream file2 = file;
int nodeCount = 0;
string blah = ' ';
while(getline(file2,blah))
{
nodeCount++;
}
ForestNode<NODETYPE> *forestNodeArray[nodeCount];//holds pointers to last node of depth i
getline(file,*f1.root.tag);
forestNodeArray[0] = &(*f1.root);
inputHelper(file, 0, *f1.root, forestNodeArray, nodeCount);
return file;
}
(и, наконец, в основном.cpp)
int main()
{
Forest < char > intForest();
filebuf fb;
fb.open ("forest1.txt",ios::in);
istream file(&fb);
cout << typeid(intForest).name() << endl;
cout << typeid(file).name() << endl;
file >> intForest;
fb.close();
}
Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: Спасибо alex и alf, я понимаю, почему они не считались шаблонными функциями.В ретроспективе это совершенно очевидно, я просто поставил эти подписи.Во всяком случае, я все еще получаю ошибку о неоднозначном операторе.Почему компилятор не распознает мой оператор и не использует его, вместо того чтобы пытаться выбрать между 3 встроенными версиями оператора, которые не могут иметь один параметр в виде Forest?