我有一个常见的函数类。基本的东西,只是在我的项目中有几个类可以使用的函数。但我试图添加一个结构数组,以便几个类可以使用它们来做某些事情。我已经从另一个类(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中定义
有人帮我解决这里发生的事情吗?
答案 0 :(得分:0)
看起来你没有在类定义中声明指针 pups
(它不是数组)。
如果你把它放在标题中但是在课外,你会得到类似的错误。
解决方案是确保在pups
类定义中声明CommonFunctions
。
答案 1 :(得分:0)
在阅读关于使其成为静态的注释后,您可能希望将其定义为extern而不是静态,因为静态意味着包含该定义的所有内容都会获得其OWN副本(即,副本不会在所有文件之间共享包括它。)
Extern意味着您需要在某个地方的c / cpp文件中定义它,但您只能定义一次,然后包含该extern的任何编译单元将使用相同的结构。
当然,您可能希望每个编译单元都拥有自己的变量副本,在这种情况下,静态就是您想要的。