【问题标题】:"function already has a body"“函数已经有主体”
【发布时间】:2011-02-14 03:28:26
【问题描述】:

这是什么意思?

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;
}

工具.h(52)

bool readXMLInteger(xmlNodePtr node, const char* tag, int& value);

【问题讨论】:

  • 确保您查看的是与编译器相同的文件副本(例如不同的路径、未保存的更改等)
  • 欢迎来到 Stack Overflow!您在上面发布的代码看起来不错,所以我怀疑该错误是由其他原因引起的。检查以下常见错误 - 您是否 #includeing 头文件末尾的 .cpp 文件?您是否在此期间进行了干净的构建?你有多个 .cpp 文件#include彼此吗?任何这些(或完全不同的东西)都可能在这里出错,但如果没有更多信息,我认为我无能为力。

标签: visual-c++


【解决方案1】:

您是否在原始头文件中使用了包含保护?

例如:

#ifndef _TOOLS_H_
#define _TOOLS_H_

... your header body is here ...

#endif

这会阻止在包含它的每个 cpp 中重新定义。

【讨论】:

    【解决方案2】:

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

    怀疑你设置预处理器语句的方式。

    【讨论】:

      【解决方案3】:

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

      我将我的实现从头文件移动到.cpp 文件,.pch 文件已经包含此信息。所以,我不得不重建来修复这个错误。

      【讨论】:

        【解决方案4】:

        这意味着该功能在您的代码中的其他地方实现。

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            【解决方案6】:

            此外,请检查您是否在同一目录中制作了文件(.cxx 或 .cpp 扩展名)的副本。因此该函数将被定义两次。
            我收到静态函数的错误!

            【讨论】:

              【解决方案7】:

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

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

              【讨论】:

                【解决方案8】:

                您收到此错误是因为从其他位置多次调用头文件。在头文件的顶部插入#pragma once。 值得查看您的所有参考资料并找出重复的调用。或者你的标题定义中有花括号(比如说,空的;))。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2023-03-12
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-08-21
                  • 1970-01-01
                  相关资源
                  最近更新 更多