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

FuN*_*K01 2 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现这很奇怪,因为它只发生在这个文件中.所有其他.cpp文件都没有问题,它们都是类似的格式.

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

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

谢谢.

PS我为任何格式化问题道歉,正如我在帖子前面所说,这是我第一次发布堆栈溢出并抱歉如果标题有点不合理.

Seb*_*ann 8

OP:

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

这就是问题所在.它的.cpp文件不是.h.它实际上包含符号的定义.如果你现在包含这个文件,那么你也可能包含这个文件的其他文件很可能包含这个文件.

发生的事情是,在这样的预处理单元代码中会发生:

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

void clear_console()
{
    if (system("CLS")) system("clear");
}
Run Code Online (Sandbox Code Playgroud)

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

或者更好,修复您的文件结构:.cpp永远不应该包括A. 而是使用例如此声明创建头文件void clear_console();.在.cpp你那么实现该功能像你这样了,但你只包括头(.h)文件.

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