У меня есть класс, который определяет некоторые массивы.
Очки.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.
}
Когда я компилирую свой код, используя С++ 11 и g++ 4.8.2, я получаю следующую ошибку компоновщика:
undefined reference to `Points::a2'
Я попытался создать файл Points.cpp, чтобы компилятор мог создать из него объектный файл.
Points.cpp
#include "Points.hpp"
Но это не исправило ошибку компоновщика.
У меня сложилось впечатление, что можно инициализировать переменные как статические constexpr в С++ 11 в объявлении класса, а затем обращаться к ним так, как я это делаю, как показано в этом вопросе: https://stackoverflow.com/a/24527701/1991500
Нужно ли мне создавать конструктор для точек, а затем создавать экземпляр класса? Что я делаю неправильно?
Любая обратная связь приветствуется! Спасибо!
Points.hpp
к пути заголовка для компилятора? - person texasbruce   schedule 21.09.2014sqrt
нельзя (переносимо) использовать в контексте, где требуется постоянное выражение. IIRC, это работает только из-за встроенных функций на g++. - person dyp   schedule 21.09.2014