導航:首頁 > 程序命令 > qt外部命令無法解析

qt外部命令無法解析

發布時間:2023-07-05 14:37:26

❶ C語言中顯示無法解析的外部命令

這是因為c和c++混編帶來的問題。

1,問題根源:c++是支持類和名字空間,函數重載等高級技巧的。以函數重載為例:

int Add(int a, int b)

int Add(int a, int b, int c)

這意味著不同的函數有同樣的名字(你寫的,都叫Add),但是同樣的名字會帶來混淆,所以使用了一種叫「名字毀壞」的技術,不同的編譯器有不同的毀壞規則,只要能實現區分就好。

所以,經過c++編譯器的處理,你的Add名字已經面目全非,比如我這里叫:

錯誤 LNK2019 無法解析的外部符號 "int __fastcall Add(int,int)" (?Add@@YIHHH@Z),函數 _main 中引用了該符號。

到這,都沒什麼,只不過名字變了一下,只要編譯器能處理正確就好。

但是,重點來了,你放了一個c文件進去,c語言,是不支持這些高級玩意兒的,名字也不會毀壞,這樣,一個毀壞一個還是原名,得,兩下對不上了。

2,解決辦法

解決辦法也是模式化的,當你聲明的變數或者函數在c文件實現的時候,在h文件里聲明的時候,用這樣的結構包含起來,無論有多少個函數,都可以放在一起。

#ifdef __cplusplus

extern "C" {

#endif

int Add(int, int);

//其他聲明

#ifdef __cplusplus

}

#endif

再編譯就不會出現Link錯誤了。

頭文件全文如下:

#pragma once

#ifdef __cplusplus

extern "C" {

#endif

int Add(int, int);

#ifdef __cplusplus

}

#endif

❷ 如何在Qt中使用全局變數,出現無法解析的

很多小夥伴在Qt編程時,不會使用全局變數,其實基本有兩種方式來定義使用全局變數,第一種是根據c/c++的extern來進行多文件的使用,第二種方法就是把全局變數放在類中,當做類靜態變數來使用,一般來說,第一種方式嚴重破壞了類的封裝,所以還是推薦第二種方式.下面給出簡單的示例:
1.先在一個.h文件中聲明一個類://c.h#ifndef C_H#define C_Hclass QPos{public:static int x; //注意關鍵字staticstatic int y;
};#endif //C_H2.在.cpp文件里類中的成員進行定義://c.cpp#include "c.h"int QPos::x = 10; //必須要在對應的.cpp文件中進行初始化,否則會被報錯!!int QPos::y = 20;3.然後就可以在其他文件中使用這些全局變數了.//m.cpp#include#include "c.h"m::m(QWidget *parent) : QWidget(parent)
{
ui.setupUi(this);
c::x= 50; /
c::y= 70;
...
}


切記對靜態變數必須的初始化必須要在類外進行,同時不能在.h頭文件中進行,應該在對應的.cpp中進行,否則會出現無法解析的錯誤.

閱讀全文

與qt外部命令無法解析相關的資料

熱點內容
伺服器如何看日活數 瀏覽:684
數控車床原理圖及編程 瀏覽:287
java文件流下載 瀏覽:336
編程工作工資多少 瀏覽:437
專業安全文件夾 瀏覽:777
表格里的根號演算法怎麼打 瀏覽:193
javacorepdf 瀏覽:573
pdf轉換word編輯 瀏覽:446
35歲程序員實習期恐慌 瀏覽:701
如何做一個系統u盤文件夾名字 瀏覽:968
如何確認哪個ip重啟了伺服器 瀏覽:132
照片壓縮軟體綠色版 瀏覽:109
pgp基於什麼體系加密 瀏覽:637
python合法賦值語句格式 瀏覽:715
程序員數學線性代數 瀏覽:624
看幀率app如何使用 瀏覽:525
從DHC伺服器租用IP地址 瀏覽:477
編譯怎麼學 瀏覽:333
數碼管顯示0到9plc編程 瀏覽:667
伺服器是為什麼服務的 瀏覽:769