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;
}

问题是main中的构造函数定义。该错误告诉我“不允许使用类型名称”,这似乎意味着它将变量“名称”识别为类型而不是字符串,尽管我包含了适当的库。

任何人都可以就我如何解决这个问题提供任何建议吗?

4

2 回答 2

10

您将构造函数定义放在main(). 那是违法的。你应该把它放在命名空间范围内。

另请注意,您还为构造函数初始化列表使用了一些错误的语法:

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命名空间的实体发生名称冲突。

于 2013-05-30T13:03:53.077 回答
4

您不能在另一个函数中定义函数(包括构造函数)。只需在全局范围内移动定义或在类定义中内联定义它。

于 2013-05-30T13:04:14.727 回答