找不到VS2010重载的成员函数

时间:2012-08-14 15:51:32

标签: c++ visual-studio-2010 syntax-error

在阅读了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'中找不到重载的成员函数。 我搜索了错误,但我没有找到解决方法。这段代码出了什么问题?

3 个答案:

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