关于静态变量出错

我在helloworld中的pulic:加了个

public:
static Vector<Sprite*> all_sprite;

然后在
bool HelloWorld::init() {

all_sprite.pushBack(mysprite);
addchild(mysprite);
}

编译的时候报了这个错

Undefined symbols for architecture x86_64:
“HelloWorld::all_sprite”, referenced from:
HelloWorld::init() in HelloWorldScene.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我选的target 是mac os

上面打错了 应该是 all_sprite.pushBack

静态成员只能被static成员函数访问,而且你这个没必要搞成静态成员啊

需要在.cpp文件中给静态变量赋初值

— Begin quote from ____

引用第3楼imyp2635于2014-10-15 09:09发表的 :
需要在.cpp文件中给静态变量赋初值 http://www.cocoachina.com/bbs/job.php?action=topost&tid=234664&pid=1075392

— End quote

这是正解

多谢楼上3位回答

static Vector<Sprite*> all_sprite; 要这么给初始值呢
还有我不明白为什么会出这个错
Undefined symbols for architecture x86_64
我明明定义了还说我没有,我网上查了 一些问题是他们变量名写错了

Vector<Sprite*> HelloWorld::all_sprite; 在cpp中方法前边加上这一句,这时候也可以给初始值,实际上这句才是真正的创建了这个静态变量,.h文件中只是声明了

多谢哈 ,:7::7:

说白了,你只是给静态变量作了声明,却未作初始化,初始化应该在对应的cpp中作。
这仅仅是c++的基础知识罢了!

— Begin quote from ____

引用第2楼newioserr于2014-10-15 08:26发表的 回 1楼(ixfire) 的帖子 :
静态成员只能被static成员函数访问,而且你这个没必要搞成静态成员啊 http://www.cocoachina.com/bbs/job.php?action=topost&tid=234664&pid=1075321

— End quote

静态成员只能被static成员函数访问====>应该是static成员函数只能访问静态成员,不能访问非静态成员(非静态成员要用对象实例来指向),你说反了!

静态成员作为类的全局变量,是有全局生命周期的!