Tôi có một lớp Configkhông xác định tham chiếu đến int const trong shared_ptr
// config.hpp
class Config {
public:
static constexpr int a = 1;
static constexpr int b = 1;
}
và bao gồm trong 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
}
và trình biên dịch nói rằng undefined reference to Config::a
và nó hoạt động khi sử dụng cout
, nhưng không hoạt động khi bên trong hàm xây dựng shared_ptr
.
Tôi không biết tại sao điều này lại xảy ra.
Bạn cần phải xác định 'a' ở phạm vi không gian tên như một thành viên tĩnh trước khi C++ 17, tức là' constexpr int Config :: a; ' –
Tại sao ' cout' hoạt động? –
Đó là một kết quả không may của việc chuyển tiếp hoàn hảo và sử dụng odr khiến cho 'make_shared' không hoạt động. 'make_shared (int (Config :: a))' cũng sẽ hoạt động –