找不到 VS2010 重载成员函数

VS2010 overloaded member function not found

本文关键字:函数 成员 重载 VS2010 找不到      更新时间:2023-10-16

在阅读了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:"播放器::P层(int)":在"播放器"中找不到重载的成员函数。我已经搜索了错误,但没有找到如何解决它。这段代码有什么问题?

您需要声明单个参数构造:

class Player {
public:
    Player(int y);
    std::string name;
    int level;
};

一旦你这样做了,就不再有一个编译器合成的默认构造函数,所以如果你需要一个,你必须编写你自己的。如果您不希望从 int 进行隐式转换,请考虑使单参数构造函数explicit

class Player {
public:
    explicit Player(int y); // no implicit conversions from int
    Player() :name(), int() {} // default constructor and implementation
    std::string name;
    int level;
};

此外,如果可能,首选构造函数初始化列表,而不是在构造函数主体中分配值。关于这个主题有很多问题,所以我不会在这里详细说明。这是您将如何做到这一点:

Player::Player(int y) : level(y) {
}

类中添加此构造函数的声明。

class Player {
public:
    Player( int y );
    string name;
    int level;
};
class Player 
{ 
public:
 Player(int );    
 string name;
 int level;
 };