静态指针本身!

时间:2010-10-29 03:04:46

标签: c++

以下代码有什么问题:

class A
{
public:
 static A* p;

 A()
 {
  p = this;
 }
};

我收到此链接错误:

错误LNK2001:未解析的外部符号“public:static class A * A :: p”(?p @ A @@ 2PAV1 @ A)

我无法弄清楚这个问题的重点,请帮忙..

1 个答案:

答案 0 :(得分:14)

该指针需要存储。你声明了,但没有定义它。在实现(.cpp)文件中执行:

A* A::p;

编辑0:

顺便说一下,每次创建一个新的类实例时,你真的想要覆盖那个指针吗?在我看来,您正在寻找Singleton pattern

编辑1:

可以初始化静态变量(与Java不同,考虑到它,虽然语法不同)。假设您有一个类foo的静态字符串成员X,那么您的实现文件可能包含以下内容:

std::string X::foo = "Happy Leif Erikson Day!";

但要小心 - 静态对象的构造函数在输入main()之前运行,并且它们在翻译单元之间的顺序是未定义的,这通常会导致"static initialization order fiasco"