访问静态constexpr std :: array而不使用类外定义

时间:2014-09-21 00:34:31

标签: c++11 static constexpr stdarray one-definition-rule

我有一个定义了一些数组的类。

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,然后按照我的方式访问它们,如下所示:{{ 3}}

我是否需要为Points创建一个构造函数然后实例化该类?我做错了什么?

感谢任何反馈!谢谢!

1 个答案:

答案 0 :(得分:2)

根据@dyp建议,我研究了静态数据成员的定义。

我的问题要求我定义Points类的静态成员变量。

按照以下问题中的示例:

Is a constexpr array necessarily odr-used when subscripted?

Defining static members in C++

我需要添加:

// in some .cpp
constexpr std::array< double, 1 > Points::a1;