Это следующий вопрос к Undefined ссылке на статический constexpr char [] [].
Следующая программа строит и работает нормально.
#include <iostream>
struct A {
constexpr static char dict[] = "test";
void print() {
std::cout << A::dict[0] << std::endl;
}
};
int main() {
A a;
a.print();
return 0;
}
Однако, если я изменяю A::print()
на:
void print() {
std::cout << A::dict << std::endl;
}
Я получаю следующую ошибку компоновщика в g++ 4.8.2.
/tmp/cczmF84A.o: In function `A::print()': socc.cc:(.text._ZN1A5printEv[_ZN1A5printEv]+0xd): undefined reference to `A::dict' collect2: error: ld returned 1 exit status
Ошибка компоновщика может быть решена путем добавления строки:
constexpr char A::dict[];
вне определения класса.
Однако мне непонятно, почему использование одного из членов массива не вызывает ошибки компоновщика при использовании массива, вызывающего ошибку компоновщика.