我有一个头文件,我已经定义了一个结构及其变量'editor',并在多个文件中使用它。我没有在其他地方宣布它,但它给了我多个声明错误。我也尝试使用#ifndef,但无济于事。
这是我的头文件:
editorlib.h
#ifndef ED_LIB
#define ED_LIB
//#include files
struct terminalProperties {
int rows,cols;
struct termios origTerm;
int mode;
}editor;
int TERMINATE=0;
//function definitions
#endif
我的editorlib.cpp
#ifndef EDITORLIBRARY_H
#define EDITORLIBRARY_H
#include "editorLibrary.h"
getAttr() {
tcgetattr(STDIN_FILENO, TCSAFLUSH, &editor.origterm);
}
//further code
#endif
驱动程序文件vi_editor.cpp:
#ifndef MAIN_H
#define MAIN_H
#include "editorLibrary.h"
int main(){
//some code
while(1){
//some code
if(TERMINATE)
break;
}
//some code
return 0;
}
#endif
我的normal.cpp:
#ifndef NORMALMODE_H
#define NORMALMODE_H
#include "editorLibrary.h"
void normalMode() {
editor.mode = 1;
//further code
}
#endif
我的command.cpp:
#ifndef COMMANDMODE_H
#define COMMANDMODE_H
#include "editorLibrary.h"
void commandMode() {
editor.mode = 2;
//further code
}
#endif
类似地,我还有一些其他文件,我没有声明编辑器变量,只是以与上面类似的方式使用它。我似乎无法找到它告诉我多重声明的原因。
答案 0 :(得分:0)
标头声明变量的多堆定义
这已经违反了One Definition Rule。简单的答案是“不要”。您只能在单个.cpp文件中通过extern
和 define 在标头中声明。