将数组添加到公共函数类时的链接错误

时间:2012-02-02 11:17:17

标签: c++ compilation

我有一个常见的函数类。基本的东西,只是在我的项目中有几个类可以使用的函数。但我试图添加一个结构数组,以便几个类可以使用它们来做某些事情。我已经从另一个类(Class 1)中删除了这个结构数组,并将它们添加到我的CommonFunctions类中。他们只会被阅读。

但我得到错误:

CommonFunctions.obj:错误LNK2005:“struct pup_file * pups”(?pups @@ 3PAUpup_file @@ A)已在Class1.obj中定义 错误LNK2005:“struct pup_file * pups”(?pups @@ 3PAUpup_file @@ A)已在Class1.obj中定义

致命错误LNK1169:找到一个或多个多重定义的符号

然后对于项目中的每个其他类(使用CommonFunctions类,所以所有这些都是真的)我得到了

错误LNK2005:“struct pup_file * pups”(?pups @@ 3PAUpup_file @@ A)已在main.obj中定义

有人帮我解决这里发生的事情吗?

2 个答案:

答案 0 :(得分:0)

看起来你没有在类定义中声明指针 pups(它不是数组)。
如果你把它放在标题中但是在课外,你会得到类似的错误。

解决方案是确保在pups类定义中声明CommonFunctions

答案 1 :(得分:0)

在阅读关于使其成为静态的注释后,您可能希望将其定义为extern而不是静态,因为静态意味着包含该定义的所有内容都会获得其OWN副本(即,副本不会在所有文件之间共享包括它。)

Extern意味着您需要在某个地方的c / cpp文件中定义它,但您只能定义一次,然后包含该extern的任何编译单元将使用相同的结构。

当然,您可能希望每个编译单元都拥有自己的变量副本,在这种情况下,静态就是您想要的。