C++ - 构造函数和自引用 类
C++ - Constructors and self-referencing classes
在开始之前,我想对所有试图帮助我的人说声谢谢。那么现在,解决手头的问题。
我有一个 Vector class,我需要一个名为 zero 的静态对象,它是一个 x = 0、y = 0 和 z = 0 的 Vector
这是我的代码(删除了一些不重要的位...)
class Vector
{
public:
Vector(double x, double y, double z);
double x, y, z;
static Vector* zero(0.0, 0.0, 0.0);
}
我收到错误:"Expected parameter declarator"
我使用的编译器是 Clang / LLVMM...它是 Xcode 附带的编译器...再次感谢您的帮助!
在 class 中,您将 Vector::zero
声明为 Vector*
,然后使用 Vector
构造函数进行初始化。这不会起作用,因为构造函数不 return a Vector*
。这可以通过在 class 声明之外动态分配 Vector::zero
来解决:
class Vector
{
...
};
Vector* Vector::zero = new Vector(0, 0, 0);
或者,更好的是——不用担心指针和动态内存分配:
class Vector
{
public:
...
static Vector zero;
// ^^^ No pointers
};
Vector Vector::zero(0, 0, 0);
说实话,根据您的需要持有参考或std::unique_ptr
可能会更好。这从图片中删除了手动内存管理。
在开始之前,我想对所有试图帮助我的人说声谢谢。那么现在,解决手头的问题。
我有一个 Vector class,我需要一个名为 zero 的静态对象,它是一个 x = 0、y = 0 和 z = 0 的 Vector
这是我的代码(删除了一些不重要的位...)
class Vector
{
public:
Vector(double x, double y, double z);
double x, y, z;
static Vector* zero(0.0, 0.0, 0.0);
}
我收到错误:"Expected parameter declarator" 我使用的编译器是 Clang / LLVMM...它是 Xcode 附带的编译器...再次感谢您的帮助!
在 class 中,您将 Vector::zero
声明为 Vector*
,然后使用 Vector
构造函数进行初始化。这不会起作用,因为构造函数不 return a Vector*
。这可以通过在 class 声明之外动态分配 Vector::zero
来解决:
class Vector
{
...
};
Vector* Vector::zero = new Vector(0, 0, 0);
或者,更好的是——不用担心指针和动态内存分配:
class Vector
{
public:
...
static Vector zero;
// ^^^ No pointers
};
Vector Vector::zero(0, 0, 0);
说实话,根据您的需要持有参考或std::unique_ptr
可能会更好。这从图片中删除了手动内存管理。