C++中同一类的静态成员变量

Lan*_*opp 2 c++ static member

我正在尝试创建一个包含指向其自身实例的静态指针的类.这是一个例子:

啊:

#include <iostream>

#ifndef _A_H
#define _A_H

class A {
 static A * a;
};

A * a = NULL;

#endif
Run Code Online (Sandbox Code Playgroud)

但是,当我在另一个文件中包含Ah时,例如:

#include "A.h"

class B {

};
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ld: duplicate symbol _a in /Users/helixed/Desktop/Example/build/Example.build/Debug/Example.build/Objects-normal/x86_64/B.o and /Users/helixed/Desktop/Example/build/Example.build/Debug/Examplebuild/Objects-normal/x86_64/A.o
Run Code Online (Sandbox Code Playgroud)

我在Mac OS X Snow Leopard上使用Xcode默认编译器.

int*_*jay 5

这一行:

A * a = NULL;
Run Code Online (Sandbox Code Playgroud)

需要看起来像这样:

A *A::a = NULL;
Run Code Online (Sandbox Code Playgroud)

并且您需要将其移出头文件,并将其放在源(.cpp)文件中.

静态成员的定义必须在程序中只存在一次.如果将此行放在头文件中,它将包含在包含它的每个源文件中,从而导致重复的符号错误.