Mam klasy configniezdefiniowana odniesienia do const int w shared_ptr
// config.hpp
class Config {
public:
static constexpr int a = 1;
static constexpr int b = 1;
}
i obejmują w main.cpp
// main.cpp
#include "config.hpp"
int main() {
std::cout << Config::a << std::endl; // this is ok
std::shared_ptr<otherClass> stream = std::make_shared<otherClass>(
Config::a); // compile error
}
i kompilator, że undefined reference to Config::a
i działa przy użyciu cout
, ale nie działa, gdy znajduje się w konstruktorze shared_ptr
.
Nie mam pojęcia, dlaczego tak się dzieje.
Trzeba zdefiniować 'A' w zakresie przestrzeni nazw jak członka statycznego przed C++ 17, czyli' constexpr Config :: int a; '' Dlaczego –
cout' działa? –
Jest to niefortunna konsekwencja idealnego przekazywania i używania odr, które sprawia, że 'make_shared' nie działa. 'make_shared (int (Config :: a))' będzie także działało –