❶ c語言無法解析的外部指令
int main()
主函數沒有定義,這是不應該犯的錯誤
❷ c++無法解析的外部命令
函數就是 void main() 寫錯了,是void main()不是void mian(),如果不是主函數就是沒有添加相應的頭文件。
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: 無法解析的外部符號 _main,該符號在函數 ___tmainCRTStartup 中被引用。
這句話的意思是void mian()函數在某個類中,沒有添加累的頭文件。
注意事項
1、在調用外部庫的時候,出現這種問題,可能就是庫調用的方式不對,在QT中調用的時候,可以在.pro文件中加入庫,或者可以在頭文件中使用
#pragma comment(lib, 「HITP450.lib」);
2、排除了這種問題,接下來就有可能調用了沒有進行聲明的函數,檢查一下是否在頭文件中進行定義。
3、配置屬性-常規-mfc的使用,選擇為使用標准Windows庫,或者選擇在靜態庫中使用mfc,並且在程序中添加 #pragma comment (lib,"Advapi32.lib") 或者在項目-屬性-鏈接器-輸入-附加依賴項 中添加相應的庫名字,但是該庫的文件路徑最好跟當前項目的路徑是一樣的,否則需要在項目-屬性-vc++目錄-庫目錄 裡面加上該庫的目錄,否則找不到該庫
4、重要一定要確定好,lib的位數和編譯器的位數選擇是一致的。
❸ C語言出現無法解析的外部命令情況是怎麼回事,我把結構數據的聲明和定義都放在頭文件中:
這個extern是聲明而非定義,它表示first在別的某處,肯定是你在別的地方沒有定義。
你可以在和該頭文件對應的cpp文件中定義這三個變數。
直接在頭文件定義(即去掉extern)是不好的做法,如果多個cpp一起編譯,它們引用了不止一次這個頭文件,會出現重復定義的錯誤。
最佳的做法是,一處定義,多處聲明。
❹ C程序編譯時提示無法解析的外部命令
int contiune_function(void)
{
printf("
Do you wish to continue? (0=NO/1=YES: ");
scanf("%d", &x);
這里名字寫錯了,應該是:continue_function
intcontinue_function()
{
printf(" Doyouwishtocontinue?(0=NO/1=YES:");
scanf("%d",&x);
while(x<0||x>1)
{
printf(" %disinvalid!",x);
printf(":");
scanf("%d",&x);
}
if(x==0)
return(NO);
else
return(YES);
}
❺ 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