前置聲明避免循環依賴

當你有兩個類互相引用的情況時,使用前置聲明可以幫助你避免循環依賴。以下是一個簡單的例子,其中包含兩個頭文件、兩個源文件以及一個 main 函數的示例

Toolnterface.h

#pragma once#include <QString>// Forward declaration of QToolBase
class QToolBase;class Toolnterface
{
public:Toolnterface(const QString& name);~Toolnterface();void SetToolBase(QToolBase* toolBase);private:QString name_;QToolBase* toolBase_;  // Using forward declaration
};

Toolnterface.cpp

#include "Toolnterface.h"
#include "QToolBase.h"Toolnterface::Toolnterface(const QString& name) : name_(name), toolBase_(nullptr)
{
}Toolnterface::~Toolnterface()
{
}void Toolnterface::SetToolBase(QToolBase* toolBase)
{toolBase_ = toolBase;// Use toolBase as needed
}

QToolBase.h

#pragma once#include <QString>// Forward declaration of Toolnterface
class Toolnterface;class QToolBase
{
public:QToolBase(const QString& name);~QToolBase();void SetToolInterface(Toolnterface* toolInterface);private:QString name_;Toolnterface* toolInterface_;  // Using forward declaration
};

QToolBase.cpp

#include "QToolBase.h"
#include "Toolnterface.h"QToolBase::QToolBase(const QString& name) : name_(name), toolInterface_(nullptr)
{
}QToolBase::~QToolBase()
{
}void QToolBase::SetToolInterface(Toolnterface* toolInterface)
{toolInterface_ = toolInterface;// Use toolInterface as needed
}

main.cpp

#include "QToolBase.h"
#include "Toolnterface.h"int main()
{QToolBase qToolBase("QToolBaseInstance");Toolnterface toolnterface("ToolnterfaceInstance");// Set references between the instancesqToolBase.SetToolInterface(&toolnterface);toolnterface.SetToolBase(&qToolBase);return 0;
}

在這個例子中,Toolnterface.h 和 QToolBase.h 頭文件中使用了彼此的前置聲明,而實際的類定義和實現則分別在 Toolnterface.cpp 和 QToolBase.cpp 文件中提供。在 main.cpp 中,我們創建了 QToolBase 和 Toolnterface 的實例,并通過 Set 方法建立了彼此之間的引用。這種結構可以防止循環依賴問題。

========================================================

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161202.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161202.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161202.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Eclipse常用設置-亂碼

在用Eclipse進行Java代碼開發時&#xff0c;經常會遇到一些問題&#xff0c;記錄下來&#xff0c;方便查看。 一、properties文件亂碼 常用的配置文件properties里中文的亂碼&#xff0c;不利于識別。 處理流程&#xff1a;Window -> Preferences -> General -> Ja…

golang學習筆記——羅馬數字轉換器

文章目錄 羅馬數字轉換器代碼 參考LeetCode 羅馬數字轉整數代碼 羅馬數字轉換器 編寫一個程序來轉換羅馬數字&#xff08;例如將 MCLX 轉換成 1,160&#xff09;。 使用映射加載要用于將字符串字符轉換為數字的基本羅馬數字。 例如&#xff0c;M 將是映射中的鍵&#xff0c;其值…

Qt+sqlite3使用事務提升插入效率

參考&#xff1a; 【精選】SQLite批量插入效率_sqlite 批量插入_PengX_Seek的博客-CSDN博客 (1)不使用事務時&#xff1a; clock_t t_start clock();QSqlQuery query(db);QString sql("insert into test(col1,col2) values(1,2);");for (int i 0; i < 1000; i…

c++學習之哈希

目錄 1.關于unordered系列關聯式容器 2.關于unordered_map 3.哈希&#xff08;散列&#xff09;表的實現 一&#xff0c;直接定址法 二&#xff0c;除留余數法 方法一&#xff1a;閉散列&#xff1a;開放定址法 方法二&#xff1a;閉散列&#xff1a;哈希桶/拉鏈法 4.哈希…

機器學習/sklearn 筆記:K-means,kmeans++

1 K-means介紹 1.0 方法介紹 KMeans算法通過嘗試將樣本分成n個方差相等的組來聚類&#xff0c;該算法要求指定群集的數量。它適用于大量樣本&#xff0c;并已在許多不同領域的廣泛應用領域中使用。KMeans算法將一組樣本分成不相交的簇&#xff0c;每個簇由簇中樣本的平均值描…

hadoop shell操作 hdfs處理文件命令 hdfs上傳命令 hadoop fs -put命令hadoop fs相關命令 hadoop(十三)

hadoop fs -help rm 查看rm命令作用 hadoop fs 查看命令 1. 創建文件夾&#xff1a; # hdfs前綴也是可以的。更推薦hadoop hadoop fs -mkdir /sanguo 2.上傳至hdfs命令&#xff1a; 作用&#xff1a; 從本地上傳hdfs系統 &#xff08;本地文件被剪切走&#xff0c;不存在了&…

論防火墻的體系結構

防火墻的體系結構 防火墻的體系結構 雙重宿主主機體系結構。屏蔽主機體系結構。屏蔽子網體系結構。 雙重宿主主機體系結構 雙重宿主主機體系結構是指以一臺具有雙重宿主的主機計算機作為防火墻系統的主體&#xff0c;執行分離外部網絡與內部網絡的任務。該計算機至少有兩個…

【NGINX--4】大規模可擴展的內容緩存

1、緩存區 緩存內容并定義緩存的存儲位置。 使用 proxy_cache_path 指令定義共享內存緩存區和內容的位置&#xff1a; proxy_cache_path /var/nginx/cachekeys_zoneCACHE:60m levels1:2inactive3h max_size20g; proxy_cache CACHE;上述緩存定義示例在文件系統 /var/nginx/ca…

為什么要用多線程?

提高響應速度&#xff1a;對于耗時操作&#xff0c;使用多線程可以使得應用程序更快地響應用戶的請求&#xff0c;從而提高用戶體驗。實現并行計算&#xff1a;多線程可以同時執行多個任務&#xff0c;從而實現并行計算&#xff0c;提高程序的運行效率。提高CPU利用率&#xff…

html屬性值可以不用引號嗎,實例驗證

html屬性值可以不用引號 HTML元素的屬性值可以不適用引號來包裹&#xff0c;瀏覽器一樣可以將其進行渲染。不過&#xff0c;如果這樣寫HTML的代碼的話&#xff0c;屬性與屬性值之間需要用空格來進行隔開&#xff0c;避免后面的屬性變成前面屬性的屬性值。 提示&#xff1a;雖…

達夢列式存儲和clickhouse基準測試

要驗證達夢BigTable和ClickHouse的性能差異&#xff0c;您需要進行一系列基準測試。基準測試通常包括多個步驟&#xff0c;如準備測試環境、設計測試案例、執行測試、收集數據和分析結果。以下是您可以遵循的一般步驟&#xff1a; 準備測試環境&#xff1a; 確保兩個數據庫系統…

sql手工注入漏洞測試(MYSQL)-墨者-url信息

背景&#xff1a; 自己在墨者官網靶場練習的時候&#xff0c;一直出錯&#xff0c;手工容易出錯&#xff0c;所以列舉一些信息供大家核對&#xff0c;可以參考改動。 數據庫版本version() 5.7.22-0ubuntu0.16.04.1 當前數據庫名稱database&#xff08;) m…

模擬量采集----測量輸入的電流

生活中的模擬量有很多 大多都為電壓信號和電流信號 今天講如何測量輸入的電流信號 通過歐姆定律可知 電流測量的測量&#xff1a;是將電流加載在固定阻值的電阻上&#xff0c;來測量這個電阻二端的電壓 最后反算出電流的大小 所用的公式是IU/R 我們使用仿真軟件來看測量…

神經網絡中間層特征圖可視化(輸入為音頻)(二)

相比方法一個人感覺這種方法更好 import librosa import numpy as np import utils import torch import matplotlib.pyplot as pltclass Hook:def __init__(self):self.features Nonedef hook_fn(self, module, input, output):self.features output# 創建鉤子的實例 hook …

EasyExcel listener無法通過Autowired注入xxMapper

easyexcel listener無法通過Autowired注入xxMapper 文章目錄 easyexcel listener無法通過Autowired注入xxMapperbug記錄&#xff1a;解決方案&#xff1a;easyexcel 使用例子controllerServiceImpllistener bug記錄&#xff1a; productMapper注入一直為null,而procureDetailM…

Visual Studio(VS) C++程序LNK2005錯誤,提示“error LNK2005: _XXX已經在xxx.obj中定義”解決方案

1.問題如圖 2.出現原因 項目中有多個源文件或頭文件&#xff0c;include后導致有些變量重復定義&#xff0c;加上Visual Studio新版版要求更嚴格 3.解決辦法 查詢到的解決辦法很多不好用&#xff0c;此處記錄解決自己問題的一個辦法&#xff1a;直接讓編譯器忽略第二次定義的…

圖形數據庫的實戰應用:如何在 Neo4j 中有效管理復雜關系

關系數據庫管理系統( RDBMS ) 代表了最先進的技術&#xff0c;這在一定程度上要歸功于其由周邊技術、工具和廣泛的專業技能組成的完善的生態系統。 在這個涵蓋信息技術(IT) 和運營技術(OT) 的技術革命時代&#xff0c;人們普遍認識到性能方面出現了重大挑戰&#xff0c;特別是…

連續變量降維:主成分分析和因子分析

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;和因子分析&#xff08;Factor Analysis&#xff09;都是用于處理連續變量降維的統計方法&#xff0c;它們在數據分析和特征提取中經常被使用。盡管它們有一些相似之處&#xff0c;但它們的目標…

初識JVM(簡單易懂),解開JVM神秘的面紗

目錄 一、什么是JVM&#xff08;Java虛擬機&#xff09;&#xff1f; 二、JVM的功能 三、JVM的功能-即時編譯 四、常見的JVM 五、JVM的組成 五、JVM的工作流程 參考資料 一、什么是JVM&#xff08;Java虛擬機&#xff09;&#xff1f; 在Java的世界里&#xff0c;Java虛…

代碼文檔瀏覽器 Dash mac中文版軟件特色

Dash mac是一個基于 Python 的 web 應用程序框架&#xff0c;它可以幫助開發者快速構建數據可視化應用。Dash 的工作原理是將 Python 代碼轉換成 HTML、CSS 和 JavaScript&#xff0c;從而在瀏覽器中呈現交互式的數據可視化界面。Dash 提供了一系列組件&#xff0c;包括圖表、表…