Ⅰ 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
Ⅱ 1 個無法解析的外部命令
沒細看你的程序,至少main()函數就有好幾個問題 1、函數裡面不能有 int (double,double,double)這樣的其他函數的聲明,應該放在函數外部,除了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++出現 1 個無法解析的外部命令
新建項目的時候應該選控制台程序,而不是Windows程序,windows程序的入口點是winmain,控制台的是main
Ⅳ fatal error LNK1120: 1 個無法解析的外部命令
>AccountDlg.obj : error LNK2001: 無法解析的外部符號 "protected: virtual struct AFX_MSGMAP const * __thiscall CAccountDlg::GetMessageMap(void)const " (?GetMessageMap@CAccountDlg@@MBEPBUAFX_MSGMAP@@XZ)
1>E:\code\linphone\Debug\linphone.exe : fatal error LNK1120: 1 個無法解析的外部命令
Ⅵ error LNK1120: 1 個無法解析的外部命令 錯誤 1 error LNK2019: 無法解析的外部符號
重新給你調整了一下,運行通過
#include <stdio.h>
int maxmin(float *array_number, unsigned n, float *max, float *min)
{
unsigned i = 0;
for (i = 0; i<n; ++i)
{
if (*max<*(array_number + i))
{
*max = *(array_number + i);
}
if (*min>*(array_number + i))
{
*min = *(array_number + i);
}
}
return 0;
}
int input(float* array_number, unsigned n)
{
printf("輸入這個數組【10】:\n");
unsigned i = 0;
for (i = 0; i < n; ++i)
{
int d;
scanf("%d", &d);
*(array_number+i) = d;
}
return 0;
}
int average(float *array_number, unsigned n, float*aver)
{
float sum = 0.0f;
unsigned i = 0;
for (i = 0; i < n; ++i)
{
sum += *(array_number+i);
}
*aver = (float)sum / 10;
return 0;
}
int main(void)
{
float date[10] = {01};
float aver = 0.0f, max = -100000.0f, min = 100000.0f;
input(date, 10);
average(date, 10, &aver);
maxmin(date, 10, &max, &min);
printf("aver=%f", aver);
printf("max=%f,min=%f", max, min);
return 0;
}
Ⅶ vs2010 error:1個無法解析的外部命令
1)friend Typep Knapsack(Typep * ,Typew * ,Typew,int);
定義錯誤,這么不包含 Knap<Typep ,Typew >類型的參數,不能為類Knap<Typep ,Typew >的友元函數
class Object{
2) friend int Knapsack(int *,int *,int,int);
這個函數也不能是類不能為,類 Object友元函數。
所以類型template<class Typew,class Typep>
class Knap和類型class Object沒有定義,編譯不能通過;
所以 函數模板template<class Typew,class Typep>
Typep Knapsack(Typep p[],Typew w[],Typew c,int n) 編譯不能通過;
所以
函數
int __cdecl Knapsack(int *,int *,int,int)" (?Knapsack@@YAHPAH0HH@Z)沒有定義。
即main 內部的函數調用
int bestp = Knapsack(p,w,c,n);不能編譯通過,所以鏈接不了,出錯了。
Ⅷ c++, fatal error LNK1120: 1 個無法解析的外部命令
將ShowStr(const string &a)的實現寫在main函數前面,同時去掉void ShowStr(const string&a)這個函數申明。
Ⅸ 錯誤 2 error LNK1120: 1 個無法解析的外部命令
錯誤2error LNK1120: 1個無法解析的外部命令,是設置錯誤造成的,解決方法如下:
1、首先用FlashFXP或其它工具連接,打開網站根目錄,htdocs-data文件夾中找到common.inc.php文件,下載到本地。
Ⅹ C++ fatal error LNK1120: 1 個無法解析的外部命令
定義在源文件a中;
1、檢查源文件a是否有參與鏈接(如果不是命令行方式編譯的話,無視這一條應該沒事
2、檢查源文件a中關於put_message的定義,是否完全與聲明一致(函數名、返回類型、參數類型