我有一个定义一些数组的类。
点.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 文件,以便编译器可以从中创建一个目标文件。
点.cpp
#include "Points.hpp"
但这并没有修复链接器错误。
我的印象是,可以在类声明中将变量初始化为 C++11 中的 static constexpr,然后按照我的方式访问它们,如这个问题所示:https://stackoverflow.com/a/24527701/1991500 https://stackoverflow.com/a/24527701/1991500
我是否需要为 Points 创建一个构造函数,然后实例化该类?我究竟做错了什么?
如有任何反馈,我们将不胜感激!谢谢!
根据@dyp的建议,我研究了静态数据成员的定义。
我的问题要求我定义 Points 类的静态成员变量。
按照这些问题中的示例:
constexpr 数组在有下标时是否一定要使用 odr ? https://stackoverflow.com/questions/23428684/is-a-constexpr-array-necessarily-odr-used-when-subscripted/23436665#23436665
and
在 C++ 中定义静态成员 https://stackoverflow.com/questions/3536372/defining-static-members-in-c
我需要补充:
// in some .cpp
constexpr std::array< double, 1 > Points::a1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)