C ++プログラムでグローバル構造を作成する

c++ global struct
C ++プログラムでグローバル構造を作成する

私は* global *構造を作成しようとしています。これは、ソースコードのどの部分からでも表示されます。 グローバル変数が必要な大きなQtプロジェクトに必要です。 ここにあります:3つのファイル(global.h、dialog.hおよびmain.cpp)。 コンパイルには、Visual Studio(Visual C ++)を使用します。

global.h

#ifndef GLOBAL_H_
#define GLOBAL_H_

typedef struct  TNumber {
    int g_nNumber;
} TNum;

TNum Num;

#endif

dialog.h

#ifndef DIALOG_H_
#define DIALOG_H_

#include
#include "global.h"

using namespace std;

class   ClassB {
public:
    ClassB() {};

    void    showNumber() {
        Num.g_nNumber = 82;
        cout << "[ClassB][Change Number]: " << Num.g_nNumber << endl;
    }
};

#endif

および_main.cpp_

#include

#include "global.h"
#include "dialog.h"

using namespace std;

class   ClassA {
public:
    ClassA() {
        cout << "Hello from class A!\n";
    };
    void    showNumber() {
        cout << "[ClassA]: " << Num.g_nNumber << endl;
    }
};

int main(int argc, char **argv) {
    ClassA  ca;
    ClassB  cb;
    ca.showNumber();
    cb.showNumber();
    ca.showNumber();
    cout << "Exit.\n";
    return 0;
}

この小さなアプリケーションをビルドしようとすると、コンパイルは正常に機能しますが、リンカーからエラーが返されます。

1> dialog.obj:エラーLNK2005:" struct TNumber Num "(?Num @@ 3UTNumber @@ A)はすでにmain.objで定義されています

解決策はありますか?

ありがとう。

  3  0


ベストアンサー

Yes. まず、ヘッダーファイルに「num」を定義しないでください。 ヘッダーで「extern」として宣言してから、グローバルを保存するファイル「Global.cpp」を作成するか、Thomas Jones-Lowの答えが示唆するように「main.cpp」に配置します。

第二に、グローバルを使用しないでください。

第三に、C ++ではこの目的のために `typedef`は不要です。 次のように構造体を宣言できます。

struct  TNum {
    int g_nNumber;
};

8


global.hで

extern TNum Num;

その後、main.cppの上部に

TNum Num;

2


C ++で記述しているため、構造体には次の形式の宣言を使用します。

struct  TNumber {
    int g_nNumber;
};

extern TNumber Num;

typedefは不要です。

2


タイトルとURLをコピーしました