定义头文件时,C++变量重复定义

KevinGarnett 2013-05-13 11:40:52
我写了三个文件,分别是windowInit.h\ windowInit.cpp和main.cpp,但是编译时显示width和height重复定义了,是怎么回事呢?
//--------------------- windowInit.h --------------------------//
#ifndef WINDOWINIT_H_INCLUDED
#define WINDOWINIT_H_INCLUDED

/* head files */
#include <windows.h>
#include <GL/glut.h>

/* variables */
int width = 640;
int height = 480;
//int window_width = 640;
//int window_height = 480;

/* subroutines */
int initWindow(int argc, char **argv);

#endif // WINDOWINIT_H_INCLUDED

//--------------------- windowInit.cpp --------------------------//
#include "windowInit.h"

int initWindow(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitWindowPosition(0, 0); //use default (-1, -1), decide by OS
//glutInitWindowSize(window_width, window_height);
glutInitWindowSize(width, height);
glutCreateWindow("3D Sence Roaming KG-LiGuang");

return 0;
}

//--------------- main.cpp ---------------------//
#include <iostream>
#include "windowInit.h"

using namespace std;

int main(int argc, char **argv)
{
/* init window by glut */
initWindow(argc, argv);

cout << "Hello world!" << endl;

return 0;
}
...全文
265 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
一叶之舟 2013-05-16
  • 打赏
  • 举报
回复
把int width = 640;int height = 480;的定义和你的处理函数不要直接产生关系,可通过函数参数传递进行(引用或指针作为出参)。 然后在main函数中定义int width = 640;int height = 480;,在调用函数时传递进去。
lm_whales 2013-05-16
  • 打赏
  • 举报
回复
1)这样写就没有问题了 const int width = 640; const int height = 480; 2)enum { width=640,heght=480 }; 3).h extern int width ; extern int height; .c 或者 .cpp int width = 640; int height = 480;
就是那个党伟 2013-05-14
  • 打赏
  • 举报
回复
引用 2 楼 kjliguangg 的回复:
那用extern之后,作用范围是多大呢?相当于全局的吗?
那里需要那里拉过来 extern用就行
KevinGarnett 2013-05-14
  • 打赏
  • 举报
回复
那用extern之后,作用范围是多大呢?相当于全局的吗?
慧眼识狗熊 2013-05-14
  • 打赏
  • 举报
回复
extern就是告诉编译器,这个变量我在别的文件里定义了,你去找找。 在该cpp中就是全局的。
luotuo44 2013-05-14
  • 打赏
  • 举报
回复
编译器为每一个cpp文件都单独生成一个目标文件(windows系统是.obj文件,linux系统是.o文件)。如楼主的代码,windowInit.cpp 和 main.cpp文件都会生成.obj文件,而这两个文件都包含了头文件,所以,生成的.obj文件都会有width和height变量的定义。到链接的时候,就会出现重复定义的情况。 不要在头文件里面定义变量。也不要在头文件里面定义函数,但可以声明函数。声明函数就是只写函数名,不写具体实现。 把变量的定义放到某一个.cpp文件里面,然后其他文件需要用到的话,就使用extern关键字。比如写成extern int width;
那一年我们21 2013-05-14
  • 打赏
  • 举报
回复
可以声明多次 只能定义一次 但是在头文件一般只是声明,不要定义, 除了有些简单的inline函数, 在调用的时候加上声明处的头文件
hugett 2013-05-13
  • 打赏
  • 举报
回复
别定义在头文件。。定义在其中一个cpp文件。。在其它要用的地方extern就好。。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧