以下代码有什么问题:
class A
{
public:
static A* p;
A()
{
p = this;
}
};
我收到此链接错误:
错误LNK2001:未解析的外部符号“public:static class A * A :: p”(?p @ A @@ 2PAV1 @ A)
我无法弄清楚这个问题的重点,请帮忙..
答案 0 :(得分:14)
该指针需要存储。你声明了,但没有定义它。在实现(.cpp
)文件中执行:
A* A::p;
顺便说一下,每次创建一个新的类实例时,你真的想要覆盖那个指针吗?在我看来,您正在寻找Singleton pattern。
你可以初始化静态变量(与Java不同,考虑到它,虽然语法不同)。假设您有一个类foo
的静态字符串成员X
,那么您的实现文件可能包含以下内容:
std::string X::foo = "Happy Leif Erikson Day!";
但要小心 - 静态对象的构造函数在输入main()
之前运行,并且它们在翻译单元之间的顺序是未定义的,这通常会导致"static initialization order fiasco"。