Запутывающее явление с символом, не найденным в тесте Google - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть класс в 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);

Почему разве это не сработало раньше, и почему просто добавив строку, которая ничего нового не делает, ошибка исчезла?

...