Я работаю над кроссплатформенной (Linux & Windows) библиотекой. У одного из моих классов есть член stati c, определенный в заголовке. И я создал его в файле CPP, например
namespace raisim {
std::function<void()> RaiSimMsg::fatalCallback_ = []() { exit(1); };
}
Файл заголовка
#ifndef RAISIM_MESSAGE_LOGGER_HPP
#define RAISIM_MESSAGE_LOGGER_HPP
#include <chrono>
...
namespace raisim {
class RaiSimMsg {
public:
...
void stream(const char *file, const int line, std::stringstream &msg, int severity) {
if (severity == RSEVERITY_FATAL)
fatalCallback_();
}
private:
static std::function<void()> fatalCallback_;
};
}
#endif //RAISIM_MESSAGE_LOGGER_HPP
Это прекрасно работает с G CC и Clang в Linux. Но MSV C выдает ошибку ссылки. Есть ли у MSV C свои собственные правила для пользователей stati c ??
Полный журнал ошибок
1>anymal.obj : error LNK2001: unresolved external symbol "private: static class std::function<void __cdecl(void)> raisim::RaiSimMsg::fatalCallback_" (?fatalCallback_@RaiSimMsg@raisim@@0V?$function@$$A6AXXZ@std@@A)
1>C:\Users\ultrafrog\source\repos\raisim\build\benchmark\Debug\speed_test_anymal.exe : fatal error LNK1120: 1 unresolved externals
1>Done building project "speed_test_anymal.vcxproj" -- FAILED.