c – 为什么错误LINK2005:当我将对象声明为静态时,对象已定义的
我有头文件中定义的结构和结构对象,如下所示:
struct STConfigurationDetails { bool bAutoStart; bool bAutoLog; bool bAutoScan; bool bAutoMount; bool bAutoOpen; bool bAutoDetectLast; }; struct STConfigurationDetails g_objConfigurationDetails ; 在头文件中,我自己拥有使用g_objConfigurationDetails的方法和方法体.当我将头文件包含到另一个cpp文件并调用该方法时,这很好.但是当我将头文件添加到另一个cpp文件时,我得到了错误:
在搜索了几个线程后,我发现我必须将我的对象声明为静态并解决了.但我想知道为什么在我只在te头文件中创建实例时出现多个实例错误. 这是因为我的头文件有一个全局变量,它被包含在多个CPP中吗? 解决方法
添加静态可能会解决您的链接问题,但会给您带来更大的问题.该变量不再是全局变量,并且在使用它的每个CPP文件中具有不同的值.您需要在头文件中将其声明为extern,然后在一个CPP文件中再次声明它.
当您使用静态时,它意味着该变量将完全是当前CPP文件的本地变量,并且不会暴露给其他文件.这就是为什么链接器不再关心另一个具有相同名称的文件中是否存在另一个静态变量的原因.它们不是同一个变量. 如果你想要一个真正的全局变量,它必须在一个CPP文件中声明,并且只有它的原型(带有extern)应该在一个头文件中,该头文件将与其他CPP文件共享.它与函数完全相同 – 在一个文件中声明,其余部分为原型.对于函数,您只是不提供正文.对于变量,您使用extern. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |