“功能已经有了身体”

时间:2011-02-14 03:28:26

标签: 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\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);

8 个答案:

答案 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。 值得查看您的所有引用并找出重复的调用。或者您的标题定义中有卷曲的括号(比如说,空的 ;))。