error LNK2005:"XXX已经在 XXX.obj 中定义

今天第一次遇到多文件包含的问题,一般来说C++开发都是声明放在头文件里,实现放在源文件里,然后使用时包含头文件,头文件为了避免被重复编译,一般来说要加个杂注“#pragma once ”,或者直接用“#ifndef XXX ....#endif”来处理。好吧,这些我都知道,偏偏各种办法都用遍了,extern也加了,就是一直给我报下面那个错:

error LNK2005:


折腾了半天,终于让我给折腾好了。


全局变量应该在头文件中声明并加extern关键字,如下所示:

#pragma  once 
#include

/* 初始化窗口有关的各种变量 */
int initWindow(char * title);
/* 关闭Window */
void releaseWindow();

// 窗口
extern SDL_Window * window;

// 渲染器
extern SDL_Renderer * render;
// 窗口大小
const int WINDOW_W = 330;
const int WINDOW_H = 500;


然后使用时,在源文件中初始化(暂时不知道为什么,先这么写),如下:

// 窗口
SDL_Window * window = nullptr;
// 渲染器
SDL_Renderer * render = nullptr;


最后编译通过。这应该是C++新手容易犯的错吧。

你可能感兴趣的:(C/C++)