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

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



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


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


   
   
  1. #pragma once
  2. #include<SDL.h>
  3. /* 初始化窗口有关的各种变量 */
  4. int initWindow(char * title);
  5. /* 关闭Window */
  6. void releaseWindow();
  7. // 窗口
  8. extern SDL_Window * window;
  9. // 渲染器
  10. extern SDL_Renderer * render;
  11. // 窗口大小
  12. const int WINDOW_W = 330;
  13. const int WINDOW_H = 500;


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


   
   
  1. // 窗口
  2. SDL_Window * window = nullptr;
  3. // 渲染器
  4. SDL_Renderer * render = nullptr;


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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值