Russian Qt Forum

Программирование => С/C++ => Тема начата: 8Observer8 от Апрель 26, 2014, 17:59



Название: [Решено]error: 'defaultHealthCalc' is not a member of 'GameStuff'
Отправлено: 8Observer8 от Апрель 26, 2014, 17:59
Здравствуйте!

Помогите, пожалуйста, решить проблему. Выдаётся сообщение:
Цитировать
GameCharacter.h:13: error: 'defaultHealthCalc' is not a member of 'GameStuff'
         explicit GameCharacter( std::string name, HealthCalcFunc hcf = GameStuff::defaultHealthCalc )

GameCharacter.h
Код
C++ (Qt)
#ifndef GAMECHARACTER_H
#define GAMECHARACTER_H
 
#include <string>
#include "functionsForHealthCalc.h"
 
namespace GameStuff {
 
   class GameCharacter {
   public:
       typedef int (*HealthCalcFunc)(const GameCharacter&);
 
       explicit GameCharacter( std::string name, HealthCalcFunc hcf = GameStuff::defaultHealthCalc )
       {
       }
 
   };
}
 
#endif // GAMECHARACTER_H
 

functionsForHealthCalc.h
Код
C++ (Qt)
#ifndef FUNCTIONS_FOR_HEALTHCALC_H
#define FUNCTIONS_FOR_HEALTHCALC_H
 
#include "GameCharacter.h"
 
namespace GameStuff {
 
   class GameCharacter;
 
   int defaultHealthCalc( const GameCharacter& gc );
}
 
#endif // FUNCTIONS_FOR_HEALTHCALC_H
 

functionsForHealthCalc.cpp
Код
C++ (Qt)
#include "functionsForHealthCalc.h"
 
namespace GameStuff {
 
   int defaultHealthCalc( const GameCharacter& gc ) {
       return 1;
   }
}
 


Название: Re: [Решено]error: 'defaultHealthCalc' is not a member of 'GameStuff'
Отправлено: 8Observer8 от Апрель 27, 2014, 07:07
Решение вот здесь подсказали: ссылка (http://www.qtcentre.org/threads/58908-defaultHealthCalc-is-not-a-member-of-GameStuff?p=262123#post262123)

Цитировать
Try removing line 4 from functionsForHealthCalc.h. Line 8 makes the include is unnecessary

When the compiler is given functionsForHealthCalc.cpp to compile it includes GameCharacter.h before it declares defaultHealthCalc(). GameCharacter.h tries to reference defaultHealthCalc() which has not yet been declared.


Название: Re: [Решено]error: 'defaultHealthCalc' is not a member of 'GameStuff'
Отправлено: Old от Апрель 27, 2014, 07:42
Вообще-то вам все это решили еще 2 месяца назад, здесь: http://www.prog.org.ru/index.php?topic=26549.msg191013#msg191013


Название: Re: [Решено]error: 'defaultHealthCalc' is not a member of 'GameStuff'
Отправлено: 8Observer8 от Апрель 27, 2014, 07:59
Я думал дежа вю :) Было подозрение, что это уже было :) Я даже пробовал в профиле искать, а тут нет списка тем. Как Вы нашли?


Название: Re: [Решено]error: 'defaultHealthCalc' is not a member of 'GameStuff'
Отправлено: Old от Апрель 27, 2014, 08:02
Как Вы нашли?
Набрал в поиске по форуму: GameCharacter


Название: Re: [Решено]error: 'defaultHealthCalc' is not a member of 'GameStuff'
Отправлено: 8Observer8 от Апрель 27, 2014, 08:03
А, понятно. Жаль, что здесь нет списка тем в профиле :(


Название: Re: [Решено]error: 'defaultHealthCalc' is not a member of 'GameStuff'
Отправлено: 8Observer8 от Апрель 27, 2014, 21:22
Получается, что компилятор сначала схватил файл functionsForHealthCalc.cpp, где было объявление #include "GameCharacter.h" А в файле "GameCharacter.h" ещё нет к этому моменту объявления функции "GameStuff::defaultHealthCalc". Но ведь там же есть включение #include "functionsForHealthCalc.h" Я так и не понял, почему не работает если в файле functionsForHealthCalc.cpp написать #include "GameCharacter.h"?