![](/img/trans.png)
[英]Accessing member function of std::shared_ptr in boost::graph?
[英]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.