2015-08-20 2 views
1

Я начинаю попытку последней проблемы с ++ проблемами в этой ссылке: http://www.cplusplus.com/forum/articles/12974/ Это называется Graduation. После того как я начал его кодировать, я решил отделить определение класса в файл заголовка. (помните об этом, если в первый раз я когда-либо определял свой собственный заголовочный файл.) Я попытался определить функцию-член класса заголовка в main.cpp, но возвращает ошибку.Ошибка: ожидаемый неквалифицированный идентификатор до 'bool'

Вот определение функции оператора, что дает ошибку:

//in main.cpp 
Bunny::bool operator>(const Bunny &comparison) //ERROR!!! expected unqualified-id before 'bool' 
{ 
    if (badbunny == false && comparison->badbunny == true) 
     return true; 
    if (badbunny == true && comparison->badbunny == false) 
     return false; 
    else if (badbunny == comparison->badbunny) { 
    //......blah..blah..blah....nothing special here 
} 

Вот определение класса заголовка:

//in Bunny class.h 
class Bunny 
{ 
public: 
    const char * name; 
    const char * color; 
    int age; 
    char sex; 
    bool badbunny; 
    Bunny *next; 
    //default constructor 
    Bunny(); 
    Bunny(char * M_color); 
    //operators 
    bool operator<(const Bunny &comparison); 
    bool operator>(const Bunny &comparison); 
}; 

Однако, когда я печатаю определение класса (и некоторые другие заявления от файл заголовка, который я не вводил здесь) прямо в main.cpp и не беспокоиться ни о каких файлах заголовков, мой компилятор не дает мне никаких ошибок. Как вы можете видеть, «bool operator> (const Bunny & сравнение);" четко объявляется в файле заголовка. Почему я не могу получить доступ к нему из main.cpp? Я четко # include'd "Bunny class.h" в main.cpp, и заголовочный файл имеет охрану и все такое.

+0

'Bunny :: bool operator> (...' должен быть 'bool Bunny :: operator> (...' – WhozCraig

+0

@WhozCraig хорошо, что он избавился от этой ошибки, получил shitload более позднее в программе, хотя XD Просто интересно, зачем мне писать это так, когда я могу написать Bunny: bool operator без каких-либо проблем, но только если я наберу определение класса в main.cpp? – Nikita

+0

Потому что вы должны сообщить компилятору контекст пространства имен оператора, который вы определяете * как-то *, это может показаться банальным, но это просто то, как работает язык. Выполняя то, что я описал, вы сообщаете компилятору «это оператор' bool <'функция, объявленная в классе 'Bunny'. – WhozCraig

ответ

2

Проблема действительно в вашем объявлении функции:

Bunny::bool operator>(...) 

правильный способ сделать это:

bool Bunny::operator>(...) 

с Bunny::, принадлежащей к имени функции, а не возвращаемый тип.

Смежные вопросы