Visual c++ &引用;函数已经有一个主体;

Visual c++ &引用;函数已经有一个主体;,visual-c++,Visual C++,这是什么意思 1>c:\users\vitali\documents\visual studio 2010\projects\salam\tools.cpp(107): error C2084: function 'bool readXMLInteger(xmlNodePtr,const char *,int &)' already has a body 1>c:\users\vitali\documents\visual studio 2010\projects\salam

这是什么意思

1>c:\users\vitali\documents\visual studio 2010\projects\salam\tools.cpp(107): error C2084: function 'bool readXMLInteger(xmlNodePtr,const char *,int &)' already has a body
1>c:\users\vitali\documents\visual studio 2010\projects\salam\tools.h(52) : see previous definition of 'readXMLInteger'
工具。cpp(107):

工具h(52)


这意味着您的实际代码在某个时刻被重新读入编译流,因此似乎有两次尝试定义(而不是声明)函数


对您设置预处理器语句的方式有所怀疑。

这意味着该函数是在代码中的其他地方实现的。

也许您已经找到了解决方案,但对我来说,重建解决方案修复了它


我将我的实现从头文件移动到
.cpp
文件,并且
.pch
文件已经有了此信息。因此,我必须重新生成以修复此错误。

您是否在原始头文件中使用了include guards

例如:

#ifndef _TOOLS_H_
#define _TOOLS_H_

... your header body is here ...

#endif

这阻碍了在每个cpp中重新定义它所包含的内容。

以下内容实际上并没有回答您的问题,但我遇到了相同的问题,原因不同。这个答案仅供记录在案

有些人在头文件中添加代码的风格非常糟糕,导致构造函数声明,如
cMyClass(){}
,这已经被认为是一个定义,而不仅仅是一个声明(是的,即使它位于头文件中)


通过将这些定义更改为实际声明来删除它们,例如
cMyClass()
将解决这类问题。

此外,请检查您是否在同一目录中复制了文件(.cxx或.cpp扩展名)。因此函数将被定义两次。

我得到了静态函数的错误

听着,这听起来很愚蠢,但是对于其他遇到这一问题的人,请确保您没有意外尝试包含cpp文件而不是标题(右键单击文件,复制完整路径,粘贴,发生了…)


查看该文件扩展名有一段时间

由于头文件在其他位置被多次调用,因此出现此错误。在头文件顶部插入一次
#pragma

值得一看你所有的参考资料,找出重复的电话。或者您的头定义中有卷曲的小册子(比如,空的;)。

请确保您查看的是编译器所在文件的同一副本(例如,不同的路径、未保存的更改等)。欢迎使用堆栈溢出!您上面发布的代码看起来不错,所以我怀疑错误是由其他原因造成的。检查以下常见错误-是否在头文件末尾包含.cpp文件?在此期间,您是否完成了干净的构建?您是否有多个.cpp文件
#相互包含
?这些(或完全不同的东西)中的任何一个都可能是错误的,但如果没有更多的信息,我想我帮不了忙。
bool readXMLInteger(xmlNodePtr node, const char* tag, int& value);
#ifndef _TOOLS_H_
#define _TOOLS_H_

... your header body is here ...

#endif