我有一个类,它定义了一些数组。
Points.hpp
class Points {
public:
static constexpr std::array< double, 1 > a1 = { {
+0.0 } };
static constexpr std::array< double, 2 > a2 = { {
-1.0 / std::sqrt( 3.0 ),
+1.0 / std::sqrt( 3.0 ) } };
};
然后,我的主文件使用这些数组。
main.cpp
#include "Points.hpp"
int main()
{
// Example on how to access a point.
auto point = Points::a2[0];
// Do something with point.
}
当我使用C++11和g++4.8.2编译代码时,我得到了以下链接器错误:
undefined reference to `Points::a2'
我试图创建一个Points.cpp文件,这样编译器就可以从中创建一个对象文件
Points.cpp
#include "Points.hpp"
但这并没有修复链接器错误。
我的印象是,可以在类声明中将C++11中的变量初始化为静态constexpr,然后按照我的方式访问它们,如本问题所示:https://stackoverflow.com/a/24527701/1991500
我需要为Points创建一个构造函数,然后实例化该类吗?我做错了什么?
感谢您的反馈!谢谢
根据@dyp的建议,我研究了静态数据成员的定义。
我的问题要求我定义Points类的静态成员变量。
以下是这些问题中的示例:
constexpr数组在下标时是否必须使用odr?
和
在C++中定义静态成员
我需要添加:
// in some .cpp
constexpr std::array< double, 1 > Points::a1;