没有构造函数的实例?

Str*_*gos 0 c++ visual-c++

我正在尝试创建我自己的Vector2D类,类似于XNA的类,以存储坐标.按照此处的构造函数示例,我创建了下面的代码.但是,我得到一个错误,说没有与参数列表匹配的构造函数"Vector2D :: Vector2D"的实例.我不知道那是怎么回事......似乎是我的问题?

struct Vector2D {
    Vector2D(int *varX, int *varY);
    ~Vector2D();
    private: int *X, *Y;
};

Vector2D::Vector2D(int *varX, int *varY) {
    X = varX;
    Y = varY;
}

Vector2D::~Vector2D() {
    free(X);
    free(Y);

}
Run Code Online (Sandbox Code Playgroud)

Jas*_*son 5

您最有可能尝试创建这样的Vector2D类:

Vector2D vector(1, 2);
Run Code Online (Sandbox Code Playgroud)

您不能使用int像您在Vector2D构造函数定义中所做的那样使用指针,因为这些值不是指针,它们是整数常量.更改为这样的简单int对象:

struct Vector2D 
{
    Vector2D(int varX, int varY): X(varX), Y(varY) {}  //initialization list
    //~Vector2D();  delete the destructor since it's not needed anymore

    int X, Y;
};
Run Code Online (Sandbox Code Playgroud)

由于数据对象不是指针,因此也不需要析构函数,因此在对象销毁时不需要额外清理堆上分配的内存.我刚刚评论过它,所以你可以看到它不再需要了.

最后,您可能希望您的数据成员就像private使用结构一样...您可以这样做,但是您必须添加一些函数来访问这些数据成员(即,如果您声明它们private然后你不能做的事情vector.x = 5;).通常,class如果您要默认private访问,则使用a 作为struct默认public访问权限.