我是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。我为任何格式问题道歉,正如我在帖子前面所说的那样,这是我第一次在堆栈溢出时发布,如果标题有点不合理,我很抱歉。
答案 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