繁体   English   中英

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

[英]Accessing static member variable using boost::shared_ptr

我正在尝试将可运行的C ++代码从Windows / Visual 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将使编译器更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM