gpt4 book ai didi

c++ - 链接器声称该对象已定义

转载 作者:行者123 更新时间:2023-11-27 23:08:04 26 4
gpt4 key购买 nike

我有一个带有 namespace 的头文件,在该 namespace 中我声明了多个事件和一个函数。在相应的 .cpp 文件中,我充实了赋予这些对象属性的函数(对象是 union )。但是,当我编译链接器时声称对象已经在 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头文件的每个文件都有自己的对象定义。这就是为什么有多个定义。

相反,您应该在 header 中将对象声明为 extern,然后有一个包含这些定义的 .cpp 文件。 extern 表示“这只是一个声明。该对象将在别处定义。”

关于c++ - 链接器声称该对象已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21919697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com