错误C2084'功能已经有一个身体'

时间:2014-01-12 21:23:05

标签: c++ visual-c++

我是C ++编码的新手,这是我在Stack Overflow上的第一篇文章。

我正在使用Visual C ++编写基于文本的游戏,我在此文件中收到了C2084错误:

//game_system_functions.cpp
#include "basicdefines.h"

namespace
{
    using namespace std;

    void clear_console()
    {
        if (system("CLS")) system("clear");
    }
}

我觉得这很奇怪,因为它只发生在这个文件中。所有其他.cpp文件对函数没有任何问题,它们都采用相似的格式。

我已经检查并仔细检查了我的所有代码,并且没有其他名为clear_console的函数。我已经尝试将函数重命名为一堆随机字母,我仍然得到相同的错误。同一.cpp文件中的其他函数会出现类似的错误。这个问题在过去一周一直困扰着我,我无法解决它。

我已阅读有关error C2084的其他帖子,但他们没有遇到此问题。 对于这个错误,我将不胜感激。

谢谢。

P.S。我为任何格式问题道歉,正如我在帖子前面所说的那样,这是我第一次在堆栈溢出时发布,如果标题有点不合理,我很抱歉。

2 个答案:

答案 0 :(得分:8)

OP:

  

我打算保留整个游戏的所有字符串和控制台操作功能,因此程序中几乎每个文件都包含它

这就是问题所在。它的.cpp文件不是.h。它实际上包含符号的定义。 如果您现在包含此文件,那么其他一些文件(包括此文件)也很可能包含此文件。

在预处理的单位代码中会发生这样的情况:

void clear_console()
{
    if (system("CLS")) system("clear");
}

void clear_console()
{
    if (system("CLS")) system("clear");
}

错误信息现在有意义,不是吗? 要解决此问题,您必须使用header guard

或者更好,修复您的文件结构:永远不应包含.cpp。而是使用例如此声明void clear_console();创建头文件。在.cpp中,您可以像执行此功能一样实现该功能,但只包含标题(.h)文件。

另请注意,这不可能使用匿名命名空间,但它们在这里根本没有任何意义。所以只需使用常规/命名的命名空间或删除它。

答案 1 :(得分:2)

您确实有一个与此.h文件对应的单独.cpp文件,不是吗?

如果没有,并且您在其他文件中尝试#include "game_system_functions.cpp",则会遇到问题,因为您的.cpp文件没有标题保护。

如果您要将文件包含在其他人中,则应该使用标题保护程序: -

#ifndef GAMESYSTEMFUNCTIONS_H
#define GAMESYSTEMFUNCTIONS_H
...
... function declarations, etc..
...
#endif