У меня есть класс в gf192.hpp
с атрибутом stati c:
class gf192 {
public:
static const constexpr uint64_t num_bits = 192;
// ...
}
Затем в файле test_all_fields.cpp
я обращаюсь к нему следующим образом (используя gtest):
EXPECT_GE(gf192::num_bits, 1);
Однако это вызывает ошибку компоновщика:
Undefined symbols for architecture x86_64:
"libff::gf192::num_bits", referenced from:
void libff::test_binary_field<libff::gf192>() in test_all_fields.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: fatal error: linker command failed with exit code 1 (use -v to see invocation)
Еще более странно то, что я могу исправить эту ошибку, изменив код следующим образом:
const uint64_t bits = gf192::num_bits;
EXPECT_GE(bits, 1);
Почему разве это не сработало раньше, и почему просто добавив строку, которая ничего нового не делает, ошибка исчезла?