Qt中全域性變數的使用

2021-10-17 03:16:13 字數 2069 閱讀 5051

一般在專案中想要定義乙個變數可以被多個類進行訪問,此時就可以定義全域性變數。習慣上會將專案中所有類都用到的變數,集中定義在乙個標頭檔案中,使用時只需包含此標頭檔案。但是對於我這樣基礎不牢靠的人,就犯了乙個錯誤,而且當時怎麼也沒找到原因。

最後在別人的幫助下,得以解決。現記錄一下。

#ifndef dataset_h

#define dataset_h

#include

#include

//#include

#include

#define maxsize 300

#define currentn 0

#define expectedn 500

static

uint32_t maxstorenum = maxsize;

//最大儲存量

static

uint32_t currentnum = currentn;

//當前儲存量

static

uint32_t prestorenum = expectedn;

//預計儲存量500

qqueue queue;

qmutex mutex;

qwaitcondition fullcondition;

//消費者等待不為空(消費太快)

qwaitcondition emptycondition;

//生產者等待為空(生產太多)

#endif

// dataset_h

這個檔案看似正常,實際上當在其它類中包含該標頭檔案,編譯專案時會出現下面的錯誤:

說是變數重定義,此時就很容易走偏。對於問題重定義的可能有以下幾點:

標頭檔案重複包含;

重名的變數被定義;

可能是編譯生成的檔案makefile中多編譯了一遍;

.pro檔案在原始檔中多包含了一遍。

反覆檢視,終不得果。究其原因是因為標頭檔案定義的全域性變數有問題,造成了多次定義。正確的寫法是:

標頭檔案中定義全部變數,需要在變數前新增關鍵字extern宣告變數,然後再在.cpp檔案中定義變數。

所以正確的寫法是:

dataset.h

#ifndef dataset_h

#define dataset_h

#include

#include

//#include

#include

#define maxsize 300

#define currentn 0

#define expectedn 500

static

uint32_t maxstorenum = maxsize;

//最大儲存量

static

uint32_t currentnum = currentn;

//當前儲存量

static

uint32_t prestorenum = expectedn;

//預計儲存量500

extern qqueue queue;

extern qmutex mutex;

extern qwaitcondition fullcondition;

//消費者等待不為空(消費太快)

extern qwaitcondition emptycondition;

//生產者等待為空(生產太多)

#endif

// dataset_h

dataset.cpp

#include

"dataset.h"

qqueue queue;

qmutex mutex;

qwaitcondition fullcondition;

qwaitcondition emptycondition;

QT中全域性變數的定義

多的就不說了,本來就是乙個簡單地內容,只是不會的話會很頭疼 我們首先新建兩個檔案,檔名可以自定義,我們在這裡定義為variate.h 和 variate.cpp 當然了,字尾是不能變的。和函式一樣,我們在variate.h中對全域性變數進行宣告,注意,extern 是不能遺漏的 ifndef var...

QT全域性變數宣告及使用

1.先在乙個.h檔案中宣告乙個類 ifndef data h define data h class data endif 2.在.cpp檔案裡類中的成員進行定義 include data.h int data flag 0 int data size 5 3.只要有了前面兩步,這些變數就可以在其他...

Qt中使用全域性變數的例項

在qt中使用全域性變數的例項 1.首先需要在乙個標頭檔案中對全域性了變數使用exern方法進行定義。extern char teststr 2.只能在cpp檔案中對其是例項化,並且例項化只能在函式的外部進行。建議在包含main函式的cpp檔案中進行例項化,這樣可以確保在其他檔案中使用時,它已經被例項...