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

时间:2016-05-20 14:44:36

标签: c++ dll

所以我遇到了问题:我删除了一些编码(结构)并将其粘贴到一个新的Header文件中。我在所需的任何地方都包含了新的Header文件,所以它不应该让我出错,但是在我尝试构建我的dll文件后,我收到了大量错误,说我剪切/粘贴的结构是重新定义。我点击了其中的一些"重新定义"和#34;原件"我同时得到同一个结构,这意味着只有一个结构,所以它不能重新定义。我此刻很困惑,我真的很感激一些帮助!在此先感谢:)

编辑: 我感动了这个:

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

从名为MW2Class.h的Header文件到另一个名为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;

2 个答案:

答案 0 :(得分:2)

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

Game_s Game;

是否要将Game添加到包含标题的每个翻译单元中(包括警卫不要停止此操作)。当你到达链接阶段时,链接器将看到所有这些全局变量是相同的,并且不知道如何处理它们。

如果您真的想要全局变量,则需要使用extern声明它并在一个翻译单元中定义它。有关详细信息,请参阅:Global variables in header file

答案 1 :(得分:0)

请务必将inclusion guard添加到标题中:

假设您的标头为test_file.hpp,包含警卫将为:

#ifndef TESTFILE_HPP_
#define TESTFILE_HPP_
#endif

这可以防止标题的多次包含。

编辑:

1 - 在您的情况下

#ifndef STRUCTS_H_
#define STRUCTS_H_
#endif