在阅读了C ++网站上的课程教程后,我学到了以下一段代码,然后我尝试使用它:
class CVector {
public:
int x,y;
CVector () {};
CVector (int,int);
CVector operator + (CVector);
};
CVector::CVector (int a, int b) {
x = a;
y = b;
}
之后我编写了以下代码,以便学习如何有效地编写C ++类并编写更清晰的代码:
class Player {
public:
string name;
int level;
};
Player::Player(int y) {
level = y;
}
然而它给了我错误C2511:'Player :: Player(int)':'Player'中找不到重载的成员函数。 我搜索了错误,但我没有找到解决方法。这段代码出了什么问题?
答案 0 :(得分:5)
您需要声明单个参数构造:
class Player {
public:
Player(int y);
std::string name;
int level;
};
一旦你这样做,将不再是编译器合成的默认构造函数,所以如果你需要一个,你必须自己编写。如果您不希望explicit
进行隐式转换,也请考虑制作单个参数构造函数int
。
class Player {
public:
explicit Player(int y); // no implicit conversions from int
Player() :name(), int() {} // default constructor and implementation
std::string name;
int level;
};
此外,如果可能,更喜欢构造函数初始化列表在构造函数体中分配值。关于该主题有很多SO问题,所以我在此不再赘述。这就是你要做的事情:
Player::Player(int y) : level(y) {
}
答案 1 :(得分:2)
在您的类中为此构造函数添加声明。
class Player {
public:
Player( int y );
string name;
int level;
};
答案 2 :(得分:1)
class Player
{
public:
Player(int );
string name;
int level;
};