基本上我的疑问是:
我有一个头文件 - foo.h
,其中包含结构指针human *person = NULL
。结构human
的定义位于foo.h中包含的另一个标头中。我正在使用game.so
和其他一些标头和cpp创建共享对象文件foo.h
。
现在,我有两个不同的cpp文件 - a.cpp
和b.cpp
,其中包含标题foo.h.
我分别创建了一个目标文件a.o
,另一个创建了b.o
。
我正在链接目标文件和game.so
以创建另一个共享对象文件tennis.so
,同时这样做,我得到了#34; person"的多个定义。我知道多重定义错误是因为a.o
包含person
的结构定义,b.o
也是如此。
我已经在#pragma once
使用了foo.h
。 a.o
正在单独编译,b.o
正在单独编译。所以我不认为#pragma曾经或ifdef会在这里有用,因为a.cpp
和b.cpp
都包括foo.h
由于创建foo.
时的某些依赖关系,我无法将game.so
h中的结构定义更改为任何其他cpp文件
有没有其他方法可以解决我在创建tennis.so
时遇到的多重定义错误?
答案 0 :(得分:4)
您需要确保person
变量仅定义一次。为此,您只需在foo.h
:
extern human *person;
然后,在foo.cpp
中,您可以定义它:
human *person = NULL;
然后,您将foo.o
包含在组成game.so
的对象文件中。
答案 1 :(得分:1)
您似乎将宣言与定义混为一谈。您的标题应该DECLARE结构,然后您的C / C ++将使用此类声明来定义变量或引用此类定义的实例[s]。