我的个人项目遇到了一些困难。请参阅以下完整代码:
#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中的构造函数定义。该错误告诉我“类型名称是不允许的”,这似乎意味着它将变量“name”标识为类型而不是字符串,尽管我包含了相应的库。
有人可以就如何解决这个问题提出任何建议吗?
答案 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
命名空间的实体发生名称冲突。
答案 1 :(得分:4)
您无法在另一个函数中定义函数(包括构造函数)。只需在全局范围内移动定义或在类定义中将其定义为内联。