2010-05-10 3 views
0

Я работаю над проектом колледжа, где мне нужно реализовать простую игру Scrabble.C++ Beginner - Проблема с использованием классов внутри классов

У меня есть player класса (содержащего результат и руку игрока, в виде std::string, и score класса (содержащего имя и числовой (int) балла).

Один из Player-х член-функция является Score getScore(), который возвращает объект Score для этого игрока, однако, я получаю следующее сообщение об ошибке на этапе компиляции:.

player.h(27) : error C2146: syntax error : missing ';' before identifier 'getScore' 
player.h(27) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
player.h(27) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
player.h(27) : warning C4183: 'getScore': missing return type; assumed to be a member function returning 'int' 
player.h(35) : error C2146: syntax error : missing ';' before identifier '_score' 
player.h(35) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
player.h(35) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

Вот строки 27 и 35, соответственно:

Score getScore(); //defined as public 
(...) 
Score _score; //defined as private 

Я понимаю, что у компилятора возникают проблемы с распознаванием Score в качестве допустимого типа ... Но почему? Я правильно включен Score.h в начале player.h:

#include "Score.h" 
#include "Deck.h" 
#include <string> 

У меня есть конструктор по умолчанию для Score, определенный в Score.h:

Score(); //score.h 

//score.cpp 
Score::Score() 
{ 
    _name = ""; 
    _points = 0; 
} 

Любой вход будет оценен по достоинству!

Спасибо за ваше время,

Francisco

EDIT:

В соответствии с просьбой, score.h и player.h: http://pastebin.com/3JzXP36i http://pastebin.com/y7sGVZ4A

+0

Ваша первая ошибка, вероятно, встречается в строке 26. Обратите внимание, что сообщение об ошибке указывает «перед идентификатором». Возможно, вы захотите добавить немного больше кода. Кроме того, конструкторы должны быть объявлены внутри определения класса. – WhirlWind

+0

Я так не думаю ... Эта ошибка возникает, потому что я пытаюсь определить Score как возвращаемый тип. Я правильно определил конструкторы. Любые предложения о том, какой код я должен включить? –

+2

Вам нужно вставить больше кода. Всего 'score.h' и первые строки' player.h' – pajton

ответ

7

Вы получили круговое включение проблема - относительно легко исправить в этом случае.

Удалить #include "Player.h" из Score.h.


См this вопрос для объяснения и обсуждения того, что вам нужно сделать, если Score фактически используется Player.


Что касается ошибок компилятора вы получаете, это как компилятор Microsoft, сообщает об использовании неопределенных типов -вы должны научиться мысленно переводить их все в «Тип используемого в декларации не определен».

+0

+1 - @Joe, что будет. – ChrisBD

+0

Спасибо за эту ссылку. –

3

Ваша проблема заключается в рекурсивный включают: Score.h пытается включить Player.h, и Player.h пытается включить Score.h. Поскольку класс Score, по-видимому, не использует класс Player, удаление #include "Player.h" из Score.h должно решить вашу проблему.

1

У вас есть circular dependency problem: Score.h включает Player.h и Player.h Включает Score.h.

Удалите эту проблему, удалите свой включенный в Player.h в Score.h и укажите class Player;, если вам нужно использовать его в классе баллов.

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