将代码移动到另一个标头后出现重定义错误

Redefinition Error after moving code into another Header

本文关键字:定义 错误 代码移动 另一个      更新时间:2023-10-16

所以我遇到了一个问题:我剪掉了一些编码(结构)并将其粘贴到一个新的头文件中。我在需要的地方都包含了新的头文件,所以它不应该给我带来错误,但是在我尝试构建我的 dll 文件后,我收到大量错误,说我剪切/粘贴的那些结构是重新定义。我点击了一些"重新定义"和"原件",我在同一时间得到了相同的结构,这意味着只有一个,所以它不能是重新定义。我现在很困惑,我真的很感激一些帮助!提前致谢:)

编辑:我移动了这个:

struct Game_s
{
    bool loaded;
    bool FirstUser;
    bool AlwaysVerfied;
    bool DoingUnlockAll;
    int Globaltimer;
    int MaxUnlockAll;
    time_t t;
};
Game_s Game;

从一个名为MW2Class.h的头文件到另一个名为Structs.h的类,如下所示:

#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <xbox.h>
struct Game_s
{
    bool loaded;
    bool FirstUser;
    bool AlwaysVerfied;
    bool DoingUnlockAll;
    int Globaltimer;
    int MaxUnlockAll;
    time_t t;
};
Game_s Game;

您的问题是您在头文件中声明了一个全局变量

Game_s Game;

Game添加到您包含标题的每个翻译单元中(包括守卫不会阻止这一点)。 当您进入链接阶段时,链接器将看到所有这些相同的全局变量,并且不知道如何处理它们。

如果你真的想要全局变量,你需要用extern声明它,并在一个翻译单元中定义它。 有关此内容的更多信息,请参阅:头文件

#ifndef TESTFILE_HPP_ #define TESTFILE_HPP_ #endif

这样可以防止标头包含多个内容。

编辑:

1 - 在您的情况下

#ifndef STRUCTS_H_
#define STRUCTS_H_
#endif