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

我写了三个文件,分别是windowInit.h\windowInit.cpp和main.cpp,但是编译时显示width和height重复定义了,是怎么回事呢?//---... 我写了三个文件,分别是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;
}
展开
 我来答
luvi88
推荐于2016-07-16 · TA获得超过230个赞
知道小有建树答主
回答量:138
采纳率:0%
帮助的人:81.9万
展开全部
1、记住,尽量不要在.c/.cpp文件中定义变量,而只能是声明变量。即将如下两句放在windowinit.cpp中。
/* variables */
int width = 640;
int height = 480;
2、在windowinit.h中声明这两个变量:
/* variables */
extern int width;
extern int height;
然后就不会重定义了。你声明在头文件中,头文件在预编译的时候,是会被展开在.cpp文件中的,这样两个cpp文件都定义了这两个变量,肯定会提示你重定义了。
追问
extern是必须的吗?
追答
extern不严格是必须的,但其明确标识实例是由外部定义(尽管不写也可以,但建议按标准来写)。
菊香飘零
2013-05-13 · 超过12用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:24.1万
展开全部
头文件里不要定义变量。
main.cpp和windowInit.cpp包含.h时都定义了这2个变量。
虽然有#ifndef保护宏,但这种保护宏只是防止同一个CPP里多次包含同一个h。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式