1. 程式人生 > >QT/C++ 未知重寫說明符解決方案

QT/C++ 未知重寫說明符解決方案

錯誤資訊:

未知重寫說明符

產生原因:

標頭檔案相互包含並且互相聲明瞭對方類的物件。即“1.h"  包含了“2.h"  裡面含class A{ }; 類A裡面含有B b;“2.h"  包含了“1.h"  裡面含class B{ }; 類B裡面含有A a;從實現的角度上看由於1.h 2.h處於不同檔案 其編譯順序肯定有先有後,假如先編譯了含“1.h" 的cpp檔案,那麼“1.h" 中的B b對於編譯器來說是未知的,這樣就產生了一個超前編譯的錯誤。第二個錯誤類A中包含了類B,類B中又包含了類A,這是一個無限的包含過程!為了避免這個情況應把二者都宣告未指標,而且為了避免標頭檔案相互包含中的"重複包含"我們需要在倆個頭檔案中加入避免重複包含的巨集定義!例如#ifndef SHOWWAVE_H
#define SHOWWAVE_H
    檔案體     
#endif 倆個頭檔案裡都需要加入!這樣就能保證倆個頭檔案都只能包含一次,或者可以加入新的巨集命令 #pragma once 檔案體實現原理是相似的。解決方案:標頭檔案重包含產生的問題難以解決,建議儘量避免產生這種情況!但是在圖形化介面的應用中,經常會產生一種情況-視窗之間的來回切換,這是A視窗需要包含B視窗的類 B視窗需要包含A視窗的類 這裡可以採取兩種解決方案:一.寫在同一個.h檔案中。把倆個類寫在同一個.h檔案中。並且需要聲明後面的那個類                                    extern class A;                                   class B{ };class A{ };.寫在不同.h檔案中。
現實實現中,我們避免不了把不同的類放到不同的.h檔案中,這是良好的程式設計規範。為此我們無法使用宣告的方法,此時可採用的方法是宣告時使用基類指標 使用時呼叫子類的建構函式,因為基類指標在編譯時往往可以避免超前編譯這個問題。

相關推薦

QT/C++ 未知重寫說明符解決方案

錯誤資訊:未知重寫說明符產生原因:標頭檔案相互包含並且互相聲明瞭對方類的物件。即“1.h"  包含了“2.h"  裡面含class A{ }; 類A裡面含有B b;“2.h"  包含了“1.h"  裡面含class B{ }; 類B裡面含有A a;從實現的角度上看由於1.h

C# Random循環生成隨機數復問題解決方案

解決方案 div random height pre -h () 解決 計算 C# Random循環生成隨機數重復問題解決方案1.當我們通過Random生成隨機數時,習慣的寫法如下: int a=new Random().Next(0,100); 然後生成一個數據數沒有任何

Python error: Microsoft Visual C++ 9.0 is required 解決方案

compile blank 安裝ipython con pan code logs onf pre 換了新電腦,在使用python2.7 pip 安裝ipython時,報錯了 error: Microsoft Visual C++ 9.0 is required. Get

一個特殊的List去問題的解決方案

list去重 clas pty print else 進行 替換 地址 列表 原創作品,可以轉載,但是請標註出處地址:http://www.cnblogs.com/V1haoge/p/7039842.html   場景描述:公司新活動,需要在活動頁面顯示指定利率的四種投資項

Java中文亂碼&特殊字解決方案

tco 其它 exce 相同 blog 選擇 misc black 是什麽 Java中文亂碼&特殊字符解決方案 相信很多朋友遇到過Java的亂碼問題,最近我也在解決一個“使用文本生成圖片過程中中文以及特殊字符亂碼”的問題;花了我大量時間,Debug了sun.font

QT-無法定位程序輸入點解決方案

bubuko com 分享圖片 定位 bsp alt image 無法 程序 如圖,個人的做法是將其上移至頂。 QT-無法定位程序輸入點解決方案

【thinkPHP框架】Failed opening required 'header.php' include_path='.;c:\php5\pear 終級解決方案

ThinkPHP框架中的某一個php頁面,想要去引入其他php頁面,結果反覆報錯,無解。 各種百度,有說是檔案許可權不夠的,也有說配置不對的,反正一個都沒有解決這個問題,依然無解。 最終,找到了辦法,似乎就是不支援,無解,捨棄這個思路!改用html模板引入。 完美解決一切問題,果然還是得靠自

error: Microsoft Visual C++ 14.0 is required解決方案

安裝python庫的時候容易出現的錯誤,尤其是安裝scrapy的時候,需要build一些元件庫。 報錯如下: 由於電腦的Visual C++ 版本過低,導致編譯失敗,解決辦法有兩個。 error: Microsoft Visual C++ 14.0 is require

ubuntu突然斷電後,啟失敗解決方案

Attention Please!!! 千萬不要把插排放在腳底下,腳底下,底下,下。。。 前天,正遠端連線伺服器除錯程式碼,突然,螢幕黑了,黑了,了。。。 低頭一看主機,發現所有應該亮著的燈全都滅了。然後主機電源插頭,竟然硬生生的被我踹出來了

echarts 關係圖節點名問題解決方案

專案中用到echarts現在不足為奇,但是關係圖(graph)這個東西比常規的餅圖,條形圖,折線圖等等這些都要難搞一些,專案中會有很多需求,   比如,A和B之間有多重關係能不能畫兩條以上的線? 這個問題我遇到過,echarts本身就沒有實現兩條線以上這個功能,在官

The C compiler identification is unknown解決方案

win10系統,VS2015 CMake錯誤: The C compiler identification is unknown The CXX compiler identification is unknown CMake Error in CMakeLists.

unity3d,C#使用sqlite作為資料庫解決方案思路

1,編輯器建立好資料庫結構,生成sqlite資料庫檔案,可以用navicat圖形介面編輯器來操作。 2,建立好的資料庫,字尾名變為.txt格式(方便unity3d載入),放檔案放到Assest/Resources目錄下(新建目錄)。放在Resources目錄下的檔案,在

MinGW編譯c++,中文顯示亂碼解決方案

我比較喜歡MinGW,現在使用的是 C:\WINDOWS\system32>gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_

HIVE匯出到HDFS沒有分割解決方案

困擾了我一天的問題,假設有一個表,要對他的資料進行一些處理,處理後將他直接匯出到HDFS上,但是匯出後檢視資料會發現,沒有分隔符分開都是密密麻麻的字母數字。 之後查詢資料後再新增 Insert overwrite directory ‘\dir’ Row format d

Window下Qt無法載入動靜態庫解決方案

載入示例程式碼 # 請配置 Mysql 的包含庫路徑 win32:INCLUDEPATH += "D:/Mysql/mysql-5.7.15-win32/include" # 請配置 Mysql 的靜態庫路徑 win32:LIBS += "-LD:/Mysql/mys

C++存在定義的解決辦法

進行c++程式碼規範化程式設計練習的時候,多個頭檔案之間進行相互引用就有可能導致某個或多個頭檔案的多次編譯 編譯器就會報錯重定義 比如  TwoDimensionalShape.h中引用了 Square.h #include "Square.h" class TwoDi

為python安裝mysql的時候:Microsoft Visual C++ 14.0 isrequired的解決方案

產生的錯誤如圖:   解決方法有兩種: 但前提都得先更新你的setuptools。首先使用如下命令: pip install --upgrade setuptools 然後再用後面的兩種方法二選一即可。   1.安裝5個g的C++支援庫。下載連結

CentOS啟後resolv.conf被置的解決方案

近期在修改一臺CentOS伺服器的dns時發現只要重啟伺服器DNS就會被強制還原,解決方案如下: 1、首先在網絡卡設定中修改NM_CONTROLLED的值: 修改檔案/etc/sysconfig/network-scripts/ifcfg-eth0的內容

ARM開發板OK6410移植opencv-2.4.7庫qt介面顯示(附加各種問題解決方案)

轉載:http://blog.csdn.net/jiebaoabcabc/article/details/22935185          經過了昨天一天苦逼的研究opencv原始碼、arm-linux編譯器工作原理和堅持不懈的make,我終於移植成功了opencv-2

Struts2 定向 亂碼解決方案

Struts2重定向傳中文: 首先對需要用重定向傳的值先用this.uname=URLEncoder.encode("中文","UTF-8"),進行指定的編碼。 在現實頁面中用URLDecoder.decode(new String(request.getParameter