2013-05-30 4 views
3

У меня были небольшие трудности с моим личным проектом. См. Полный код ниже:Почему мой класс-конструктор не работает, как ожидалось?

#include <iostream> 
#include <string> 

using namespace std; 

class Player { 
public: 
Player(string name, int Dex, int Mod, int Lvl, int diceRoll); 

int calcInitiative(int Dex, int Mod, int Lvl); 
int sortInitiative(int Init); 

int diceRoll; 

private: 

int mDex, mMod, mLvl; 
string mName; 
}; 

int main() { 

Player::Player(string name, int Dex, int Mod, int Lvl, int diceRoll) { 
mName(name), mDex(Dex), mMod(Mod), mLvl(Lvl); 
} 

Player D("Derek", 2, 0, 6, rollD); 

return 0; 
} 

Проблема заключается в определении конструктора в основном. Ошибка говорит мне, что «имя типа не разрешено», что, по-видимому, означает, что он идентифицирует переменную «имя» как тип, но не строку, несмотря на то, что я включил соответствующие библиотеки.

Может ли кто-нибудь предложить какие-либо советы относительно того, как я могу это исправить?

ответ

10

Вы помещаете определение конструктора внутри main(). Это незаконно. Вы должны поместить его в область пространства имен.

заметить также, что вы также используете некоторые неправильный синтаксис для constructor initialization list:

Player::Player(string name, int Dex, int Mod, int Lvl, int diceRoll) 
    : mName(name), mDex(Dex), mMod(Mod), mLvl(Lvl) 
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
// This is how you should write the initialization list 
{ 
} 

int main() { 
    Player D("Derek", 2, 0, 6, rollD); 
    return 0; 
} 

Кроме того, вы не объявили rollD в любом месте, поэтому компилятор выдаст сообщение об ошибке для этого после того, как вы исправить те Я упомянул выше.

Наконец, пожалуйста, имейте в виду, что наличие using директивы, такие как это:

using namespace std; 

В области видимости пространства имен рассматривается как плохая практика программирования, потому что это легко приводит к имени столкновений с лицами, принадлежащими к std Пространство имен.

+0

Ах, кричит! Я хотел бы определить его, кроме того, в онлайновом режиме, поскольку в конце концов он будет довольно сложным, но я забыл, что он не может быть в основном. Спасибо! Исправление по списку инициализации со ссылкой было также очень полезно! –

+0

@ user2395694: Хорошо, рад, что это помогло :) Если это решает вашу проблему, пожалуйста, подумайте о том, чтобы отметить ответ, принятый, когда вам разрешат (или любой другой ответ, который вы можете предпочесть другим пользователям) –

4

Вы не можете определить функции (включая конструктор) внутри другой функции. Просто переместите определение в глобальном масштабе или определите его встроенным в определение класса.

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