c++ - 没有构造函数的实例?

标签 c++ visual-c++

我正在尝试创建我自己的 Vector2D 类,类似于 XNA 的类,用于存储坐标。按照构造函数的示例找到 here ,我创建了下面的代码。但是,我收到一条错误消息,指出没有与参数列表匹配的构造函数“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);

}

最佳答案

您很可能会尝试像这样创建您的 Vector2D 类:

Vector2D vector(1, 2);

您不能像在 Vector2D 构造函数定义中那样使用指向 int 的指针来做到这一点,因为这些值不是指针,它们是整数常量。更改为像这样的简单 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;
};

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

最后,如果您使用的是结构,您可能希望您的数据成员为private ...您可以做到,但您会然后必须添加一些函数来访问这些数据成员(即,如果您将它们声明为 private,那么您将无法执行类似 vector.x = 5; 的操作)。通常,如果您想默认使用 private 访问,您会使用 class,因为 struct 默认为 public 访问.

关于c++ - 没有构造函数的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6083987/

相关文章:

c++ - 如何在 Visual C++ 2008 中就地构建转换为数组编译的结构?

c++ - GetObject - GetObjectA 链接器错误

c++ - 错误C2039是什么?在这种情况下,这意味着什么?

c++ - 初始化结构中结构的 vector

c++ - 在 C++ 中 throw e for refer 时局部 var destroy?

c++ - Directx 9 地形碰撞

c++ - 从文本 C++ 中提取字符串数据

winapi - 如何获取与 Windows 主题关联的图标?

c++ - 指向 std::thread 的共享指针是一种不好的做法吗?

c++ - Qt - 显示选择顶部的结果