日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt中全局变量的使用

發布時間:2024/9/27 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt中全局变量的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般在項目中想要定義一個變量可以被多個類進行訪問,此時就可以定義全局變量。習慣上會將項目中所有類都用到的變量,集中定義在一個頭文件中,使用時只需包含此頭文件。但是對于我這樣基礎不牢靠的人,就犯了一個錯誤,而且當時怎么也沒找到原因。
最后在別人的幫助下,得以解決。現記錄一下。

#ifndef DATASET_H #define DATASET_H#include <QMutex> #include <QWaitCondition> //#include <QVector> #include <QQueue>#define MaxSize 300 #define CurrentN 0 #define ExpectedN 500static uint32_t maxStoreNum = MaxSize;//最大存儲量 static uint32_t currentNum = CurrentN;//當前存儲量 static uint32_t preStoreNum = ExpectedN;//預計存儲量500QQueue<quint8> queue;QMutex mutex; QWaitCondition fullCondition;//消費者等待不為空(消費太快) QWaitCondition emptyCondition;//生產者等待為空(生產太多)#endif // DATASET_H

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

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

  • 頭文件重復包含;
  • 重名的變量被定義;
  • 可能是編譯生成的文件makefile中多編譯了一遍;
  • .pro文件在源文件中多包含了一遍。
    反復查看,終不得果。究其原因是因為頭文件定義的全局變量有問題,造成了多次定義。正確的寫法是:
  • 頭文件中定義全部變量,需要在變量前添加關鍵字extern聲明變量,然后再在.cpp文件中定義變量。

    所以正確的寫法是:
    DataSet.h

    #ifndef DATASET_H #define DATASET_H#include <QMutex> #include <QWaitCondition> //#include <QVector> #include <QQueue>#define MaxSize 300 #define CurrentN 0 #define ExpectedN 500static uint32_t maxStoreNum = MaxSize;//最大存儲量 static uint32_t currentNum = CurrentN;//當前存儲量 static uint32_t preStoreNum = ExpectedN;//預計存儲量500extern QQueue<quint8> queue;extern QMutex mutex; extern QWaitCondition fullCondition;//消費者等待不為空(消費太快) extern QWaitCondition emptyCondition;//生產者等待為空(生產太多)#endif // DATASET_H

    DataSet.cpp

    #include "DataSet.h"QQueue<quint8> queue; QMutex mutex; QWaitCondition fullCondition; QWaitCondition emptyCondition;

    總結

    以上是生活随笔為你收集整理的Qt中全局变量的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。