这是什么意思?
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'
tools.cpp(107):
bool readXMLInteger(xmlNodePtr node, const char* tag, int32_t& value)
{
char* nodeValue = (char*)xmlGetProp(node, (xmlChar*)tag);
if(nodeValue)
{
value = atoi(nodeValue);
xmlFreeXOXL(nodeValue);
return true;
}
return false;
}
的Tools.h(52)
bool readXMLInteger(xmlNodePtr node, const char* tag, int& value);
答案 0 :(得分:9)
您是否在原始头文件中使用了包含警戒?
例如:
#ifndef _TOOLS_H_
#define _TOOLS_H_
... your header body is here ...
#endif
这阻止了在包含它的每个cpp中重新定义。
答案 1 :(得分:6)
这意味着在某些时候你的实际代码被重新读入编译流,所以似乎有两次尝试定义(而不是声明)函数。
怀疑设置预处理程序语句的方式。
答案 2 :(得分:3)
也许您已经找到了解决方案,但对我来说,重建解决方案已经解决了。
我将实现从头文件移到.cpp
文件,.pch
文件已经有了这个信息。所以,我不得不重建来解决这个错误。
答案 3 :(得分:2)
这意味着该函数已在代码中的其他位置实现。
答案 4 :(得分:1)
以下内容实际上并没有回答您的问题,但我遇到了同样的问题。这个答案仅供记录。
有些人对头文件添加代码的风格非常糟糕,导致像cMyClass() {}
这样的构造函数声明已经被认为是一个定义,而不仅仅是一个声明(是的,即使它位于头文件)
通过将这些定义更改为实际声明来删除这些定义,例如cMyClass();
将解决这一特殊问题。
答案 5 :(得分:0)
此外,检查是否已在同一目录中复制了文件(.cxx或.cpp扩展名)。因此该函数将被定义两次。
我收到静态函数错误!
答案 6 :(得分:0)
听,这听起来很愚蠢,但是对于遇到此问题的其他任何人,请确保您没有意外地尝试包含cpp文件而不是标题(右键单击文件,复制完整路径,粘贴,它会发生...)
让该文件扩展名停留了一段时间
答案 7 :(得分:0)
您收到此错误是因为从其他位置多次调用头文件。在头文件的顶部插入 #pragma once
。
值得查看您的所有引用并找出重复的调用。或者您的标题定义中有卷曲的括号(比如说,空的 ;))。