Han*_*esh 0 c++ oop static constants
如何在C++中声明静态常量值?我希望能够获得常量Vector3 :: Xaxis,但我不能改变它.
我在另一个类中看到了以下代码:
const MyClass MyClass::Constant(1.0);
Run Code Online (Sandbox Code Playgroud)
我试着在班上实现这个:
static const Vector3 Xaxis(1.0, 0.0, 0.0);
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误
math3d.cpp:15: error: expected identifier before numeric constant
math3d.cpp:15: error: expected ‘,’ or ‘...’ before numeric constant
Run Code Online (Sandbox Code Playgroud)
然后我尝试了一些类似于我在C#中所做的事情:
static Vector3 Xaxis = Vector3(1, 0, 0);
Run Code Online (Sandbox Code Playgroud)
但是我得到其他错误:
math3d.cpp:15: error: invalid use of incomplete type ‘class Vector3’
math3d.cpp:9: error: forward declaration of ‘class Vector3’
math3d.cpp:15: error: invalid in-class initialization of static data member of non-integral type ‘const Vector3’
Run Code Online (Sandbox Code Playgroud)
到目前为止,我班上的重要部分看起来像这样
class Vector3
{
public:
double X;
double Y;
double Z;
static Vector3 Xaxis = Vector3(1, 0, 0);
Vector3(double x, double y, double z)
{
X = x; Y = y; Z = z;
}
};
Run Code Online (Sandbox Code Playgroud)
我如何实现我在这里要做的事情?要有一个Vector3 :: Xaxis,它返回Vector3(1.0,0.0,0.0);
class Vector3
{
public:
double X;
double Y;
double Z;
static Vector3 const Xaxis;
Vector3(double x, double y, double z)
{
X = x; Y = y; Z = z;
}
};
Vector3 const Vector3::Xaxis(1, 0, 0);
Run Code Online (Sandbox Code Playgroud)
请注意,最后一行是定义,应放在实现文件中(例如[.cpp]或[.cc]).
如果你需要这个仅用于标题的模块,那么有一个基于模板的技巧可以帮助你 - 但如果你需要的话,最好另外询问一下.
干杯&hth.,