首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有构造函数的实例?

没有构造函数的实例?
EN

Stack Overflow用户
提问于 2011-05-22 03:33:38
回答 4查看 3.6K关注 0票数 0

我正在尝试创建我自己的Vector2D类,类似于XNA的类,用来存储坐标。按照构造函数找到here的示例,我创建了下面的代码。但是,我得到一个错误,说没有与参数列表匹配的构造函数"Vector2D::Vector2D“的实例。我不明白这是怎么回事...我的问题似乎出在哪里?

代码语言:javascript
运行
复制
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);

}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-22 03:40:57

您很可能正在尝试创建Vector2D类,如下所示:

代码语言:javascript
运行
复制
Vector2D vector(1, 2);

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

代码语言:javascript
运行
复制
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;
};

也不需要析构函数,因为您的数据对象不是指针,因此在对象销毁时不需要额外清理堆上已分配的内存。我刚刚把它注释掉了,所以你可以看到它不再需要了。

最后,如果使用结构,您可能不希望数据成员为private ...你可以这样做,但你必须添加一些函数来访问这些数据成员(即,如果你将它们声明为private,那么你就不能做像vector.x = 5;这样的事情)。通常,如果您希望缺省为private访问,则应使用class,因为struct缺省为public访问。

票数 5
EN

Stack Overflow用户

发布于 2011-05-22 03:40:49

我认为你选择了一个糟糕的例子来作为基础。这个例子是一个string类,所以它接受指针,分配和释放存储等等。string是可变长度的,所以它们需要做这样的事情。

我猜这个错误可能是因为

代码语言:javascript
运行
复制
Vector2D v(3, 5);

问题是您的构造函数接受int*参数,而您使用int参数调用它。你不应该在这里使用指针。

票数 2
EN

Stack Overflow用户

发布于 2011-05-22 03:44:46

问题不在于定义,而在于你如何使用这个类。例如,代码如下:

代码语言:javascript
运行
复制
int main(){
    Vector2D v2D_none;
}

将产生您正在讨论的错误,因为没有默认(无参数)构造函数。由于类型不匹配,调用Vector2D v2D(1,2)也将失败。

此外,正如在注释中指出的那样,在析构函数中使用free是一个糟糕的选择。你为什么要用指针呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6083987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档