我有以下代码:
#ifndef GOOGLESET_PHP_H
#define GOOGLESET_PHP_H
zend_class_entry *googleset_ce;
#endif /* GOOGLESET_PHP_H */
由于某种原因,如果我将此头文件包含在多个cpp文件中,编译器会大声喊我声明googleset_ce
不止一次。上面的条件宏不足以避免这种情况吗?
您需要使用extern
关键字:
是,但是您只声明了一次[每个编译单元
请注意,这是一个链接器
如果标头包含在多个.c / .cpp文件中,那么实际上它可能已在多个.obj文件中声明。您必须将其封装在名称空间或类中,因此对于包含它的每个.cpp文件,它都不被视为全局变量。
lurscher有答案。如果要在.cpp文件之间共享同一全局变量,一种方法是在一个.cpp文件中全局声明它,然后在头文件中将其声明为extern。
而不是使用“ #ifndef GOOGLESET_PHP_H