使用boost::shared_ptr访问静态成员变量
Accessing static member variable using boost::shared_ptr
我正试图将一个正在运行的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
将使编译器更容易。
相关文章:
- 如何在复杂继承中访问静态成员变量
- 如何在类内部使用和访问静态指针到成员值s_ptm?
- decltype:使用指针访问类的静态成员
- 是否通过单元化指针UB访问静态类成员
- 将对象数限制为1可以使用点运算符访问静态成员的1
- 多态性:通过类文本或对象访问静态成员
- 从另一个类访问静态成员函数
- 无法访问静态成员函数C++
- 从外部访问静态成员并通过继承 c++ 访问静态成员
- 通过非静态方法访问静态成员
- 如何在没有对象的情况下访问静态成员 (C++)
- 为什么链接器在内联构造函数中访问静态成员时失败
- 我可以在没有任何前向声明的类/结构上访问静态成员函数吗?
- 访问静态成员函数中的非静态成员的解决方法
- Visual C++ 使用成员选择运算符(. 或 –>)访问静态成员函数
- 使用boost::shared_ptr访问静态成员变量
- 非静态成员函数是否可以访问静态成员函数或数据
- 在c++中显式访问静态成员方法中的静态成员变量
- 无法访问静态成员 ->未解析的外部符号 i
- 通过运算符 [] 访问静态成员unordered_map