链接器声称该对象已定义
Linker claiming that object is already defined
我有一个带有命名空间的头文件,在该命名空间中,我声明了多个事件和一个函数。在相应的.cpp文件中,我充实了为这些对象提供其属性的函数(对象是联合的)。但是,当我编译链接器时,链接器声称对象已经在main.obj中声明,而实际上它们还没有。我觉得这是我使用命名空间的问题,但我找不到任何指向该假设的内容。
.h
#pragma once
#include <SDL.h>
namespace UserEvents {
/*Events for the StateMachine*/
SDL_Event switchToEntryState;
SDL_Event switchToIntroState;
SDL_Event switchToGameState;
SDL_Event switchToPauseState;
SDL_Event exitState;
SDL_Event shutdownStateMachine;
bool initUserStates();
};
还有.cpp
#include "UserEvents.h"
using namespace UserEvents;
/*
SDL_Event switchToEntryState;
SDL_Event switchToIntroState;
SDL_Event switchToGameState;
SDL_Event switchToPauseState;
SDL_Event exitState;
SDL_Event shutdownStateMachine;
*/
/*
***********************************
USER EVENT CODE CHART
***********************************
EVENT CODE | MODULE
--------------------
0 | STATEMACHINE
*/
bool initUserStates() {
//Attempt to register the number of events
Uint32 userEventType = SDL_RegisterEvents(6); //Registering 6 custom events
if (userEventType!= ((Uint32)-1)) {
//Set up each event
SDL_zero(switchToEntryState);
SDL_zero(switchToIntroState);
SDL_zero(switchToGameState);
SDL_zero(switchToPauseState);
SDL_zero(exitState);
SDL_zero(shutdownStateMachine);
switchToEntryState.type = userEventType;
switchToIntroState.type = userEventType;
switchToGameState.type = userEventType;
switchToPauseState.type = userEventType;
exitState.type = userEventType;
shutdownStateMachine.type = userEventType;
switchToEntryState.user.code = 0;
switchToIntroState.user.code = 0;
switchToGameState.user.code = 0;
switchToPauseState.user.code = 0;
exitState.user.code = 0;
shutdownStateMachine.user.code = 0;
switchToEntryState.user.data1 = (void*)0;
switchToIntroState.user.data1 = (void*)1;
switchToGameState.user.data1 = (void*)2;
switchToPauseState.user.data1 = (void*)3;
exitState.user.data1 = (void*)4;
shutdownStateMachine.user.data1 = (void*)-1;
return 1;
}
return 0;
}
#include
头文件的每个文件都有自己的对象定义。这就是为什么有多个定义。
相反,您应该在标头中将对象声明为extern
,然后具有包含这些定义的单个.cpp
文件。extern
说:"这只是一个宣言。该对象将在其他地方定义。
相关文章:
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 自定义对象的dlib序列化在gcc中失败
- 已定义/多个对象定义/可视化工作室
- 如何将对象定义为一种类型,然后再将其声明为子类型
- 使用派生类实例化基类,而不在对象定义中使用指针
- 为非标准对象定义散列函数和相等函数
- 如何以对象定义向多个构造函数发送值
- C++"更大"的函数对象定义
- C++宏整数和对象定义
- 外部未命名结构对象定义
- 无法编译.头文件.包含自己的对象定义
- 在C++中,std::cin 对象定义在哪里
- 是否应该为具有指向其父对象的指针的对象定义一个复制构造函数
- 为每个对象定义一个唯一的函数
- 我可以为某个对象定义一个类方法吗?
- 如何为对象定义模板化方法,其中一些对象也是模板化的
- 在游戏对象定义中放置的位置
- Opencv3最小对象定义错误
- 在对象定义之后调用构造函数
- 在 c++ 中为对对象定义排序函数的比较器