定义头文件时,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;
} 展开
//--------------------- 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;
} 展开
2个回答
展开全部
1、记住,尽量不要在.c/.cpp文件中定义变量,而只能是声明变量。即将如下两句放在windowinit.cpp中。
/* variables */
int width = 640;
int height = 480;
2、在windowinit.h中声明这两个变量:
/* variables */
extern int width;
extern int height;
然后就不会重定义了。你声明在头文件中,头文件在预编译的时候,是会被展开在.cpp文件中的,这样两个cpp文件都定义了这两个变量,肯定会提示你重定义了。
/* variables */
int width = 640;
int height = 480;
2、在windowinit.h中声明这两个变量:
/* variables */
extern int width;
extern int height;
然后就不会重定义了。你声明在头文件中,头文件在预编译的时候,是会被展开在.cpp文件中的,这样两个cpp文件都定义了这两个变量,肯定会提示你重定义了。
追问
extern是必须的吗?
追答
extern不严格是必须的,但其明确标识实例是由外部定义(尽管不写也可以,但建议按标准来写)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询