2017-08-23 13 views
-4

構造体と変数 'editor'を定義したヘッダファイルがあり、複数のファイルで使用しています。私は他の場所に宣言していませんが、それは私に複数の宣言エラーを与えます。私も#ifndefを使ってみましたが、役に立たなかった。定義/宣言が1つのみのときにヘッダ宣言された変数のマルチファイル定義エラー

これは私のヘッダファイルです:

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 

マイノーマル.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 

同様に、私は、エディタの変数を宣言したが、単に上記と同様の方法でそれを使用していない他のいくつかのファイルがあります。なぜ私は複数の宣言について教えているのか分かりません。ヘッダの

+1

CまたはC++。一つを選ぶ。 – tilz0R

+1

そうしないでください。 1つの定義ルールがあります。それを観察してください。 – EJP

+4

ヘッダから変数定義を削除します。 'extern'宣言を使って、ソースファイルの一つに変数を定義してください。それでおしまい。 –

答えて

0

Multpile定義は、これはすでに一つの定義規則に違反している変数

を宣言しました。簡単な答えは「しない」です。 はでと、ではを1つの.cppファイルに定義してください。

+0

これはeditorlib.cppファイルで宣言したときに機能しましたが、vi_editor.cppファイルのドライバコードで宣言したときには機能しませんでした。 – telekineser

+0

コメントは不可能ですが、One Definition Ruleが適用されます。 – EJP

関連する問題