簡體   English   中英

在C ++程序中實現全局結構

[英]Making Global Struct in C++ Program

我正在嘗試創建全局結構,這將從源代碼的任何部分看出。 我需要它用於我的大型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 <iostream>
#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 <iostream>

#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 : error LNK2005: "struct TNumber Num" (?Num@@3UTNumber@@A) already defined in main.obj

有沒有解決方案?

謝謝。

是。 首先,不要在頭文件中定義num 在標題中將其聲明為extern ,然后創建一個文件Global.cpp來存儲全局,或者將其放在main.cpp如Thomas Jones-Low的回答所示。

其次,不要使用全局變量。

第三,在C ++中為此目的不需要typedef 您可以像這樣聲明您的結構:

struct  TNum {
    int g_nNumber;
};

在global.h中

extern TNum Num;

然后在main.cpp的頂部

TNum Num;

因為你是用C ++編寫的,所以使用這種形式的結構聲明:

struct  TNumber {
    int g_nNumber;
};

extern TNumber Num;

typedef是不必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM