使用boost::shared_ptr访问静态成员变量

Accessing static member variable using boost::shared_ptr

本文关键字:访问 静态成员 ptr 变量 boost shared 使用      更新时间:2023-10-16

我正试图将一个正在运行的C++代码从Windows/View C++2010移植到Linux(Ubuntu 12.04(平台1

该代码正试图使用boost的shared_ptr访问静态成员变量。当我将这段代码移植到Linux时,我得到了:"undefined reference to Test::TYPE",尽管它在Windows上编译并运行良好。

以下是演示错误的测试程序:

#include <iostream>
#include <boost/shared_ptr.hpp>
class Test
{
public:
    Test(int x, int y) : a_(x), b_(y) { }
    void print() { std::cout << "a_ : " << a_ << ", b_ : " << b_ <<   std::endl; }
    static const unsigned int TYPE = 5;
private:
    int a_;
    int b_;
};
int main()
{
    boost::shared_ptr<Test> pTest(new Test(10, 20));
    pTest->print();
    std::cout << "Test Type is: " << pTest->TYPE << std::endl;
    return 0;
} 

我想知道为什么GCC为上面的代码提供了未定义的引用?

注意:如果我使用一个简单的指针而不是boost shared_ptr,它会很好。


1.我使用的是Ubuntu Linux 12.04,gcc版本4.6.4和boost 1.44。

"未定义引用"是链接器错误。显然,编译器使用常量的地址,可能是因为它不够聪明,无法意识到它总是同一个常量。

当以需要常量地址的方式使用时,例如通过引用传递常量时,还必须提供常量的定义(在一些.cpp文件中(。

通过共享指针访问常量似乎比必要的要复杂一些。使用Test::TYPE将使编译器更容易。