導航:首頁 > 源碼編譯 > 函數c模板不能編譯

函數c模板不能編譯

發布時間:2024-12-31 19:03:37

㈠ 模板類無法編譯通過,誰能幫我解釋

返回值前面加個 typename就可以,
這是為了告訴編譯器class_A<T>::struct_A是一種類型而不是類的成員變數

其實:
warning C4346: 「class_A<T>::struct_A」 : 依賴名稱不是類型
用「typename」為前綴來表示類型
編譯器說的非常明確了!

VS7.1上編譯通過!VS6.0不知道可不可以!

template <class T>
typename class_A<T>::struct_A* //---這里加個typename
class_A<T>::generate_new_struct_A_instance()
{
struct_A * new_instance = new struct_A;
new_instance->a = 1;
new_instance->b = 2;
return new_instance;
}

///
改成double 為什麼可以,我很長時間沒看模板了,具體我也不清楚!
我估計對於特化的函數是把它當作一般函數那樣編譯的!

㈡ TC 2.0 中clrsrc函數不能被編譯

或標簽) ,該連接器無法找到所有的圖書館和目標文件它的搜索。一般情況下,有兩個原因發生此錯誤:什麼代碼要求不存在(符號拼寫錯誤或使用了錯誤的情況下,例如) ,或要求的代碼錯誤的(您使用的是混合版本圖書館?一些從一個版本的產品,另一些從另一個版本) 。

無數種編碼和編譯錯誤可能會導致LNK2001 。有幾個具體原因下面列出,一些有聯系的更詳細的解釋。
編碼問題

不匹配的情況下在您的代碼或模塊定義( 。畫質)文件可能會導致LNK2001 。例如,如果您命名一個變數「 var1 」在一個C + +源文件,並嘗試使用它作為「 VAR1 」在另一個,你會收到此錯誤。解決辦法是完全匹配的情況下,文中所有提及。

一個項目,使用功能內嵌尚未確定了職能。 cpp文件,而不是在頭文件可能會導致LNK2001 。

如果您使用的是C + +中,請確保使用外部的「 C 」時調用C函數的C + +程序。通過使用外部的「 C 」您的使用武力的C命名約定。了解編譯器開關一樣/總蛋白或/鍀武力將文件編譯為一個C ( /技術合作)或C + + ( /總蛋白)檔案不管文件擴展名,或者您可能會得到不同的函數名比您預期的。

試圖參考功能或數據不具備的外部聯系的原因LNK2001 。 C + +中,內置的功能和構造數據內部的聯系,除非明確指定為外部。

丟失函數機構或變數會導致LNK2001 。剛剛一個函數原型或外部宣言將使編譯繼續,沒有錯誤,但鏈接將無法解決您的電話的地址或參考變數,因為沒有功能代碼或變數空間保留。

姓名裝修採用參數的函數進入最後裝飾功能名稱。調用一個函數的參數類型不匹配是在函數聲明可能會導致LNK2001 。

錯誤包括原型將導致編譯預期功能的機構,不提供。如果您同時擁有一類和非類執行函數F ,小心C + +的范圍內解決的規則。

當使用C + +中,一定要包括執行特定功能的一類,而不只是一個原型的類的定義。

試圖調用一個純虛函數的構造函數或析構函數的抽象基類將導致LNK2001因為按照定義一個純虛函數沒有基類執行。

全球唯一的函數和變數是公開的。
職能宣布與靜態修飾的定義文件的范圍。靜態變數具有相同的限制。試圖訪問任何靜態變數以外的文件,他們被宣布可能會導致出現一個編譯錯誤或LNK2001 。

一個變數的函數內宣布(一局部變數)只能使用范圍之內的這一職能。

C + +的全球靜態常量有聯系。這是不同於c.如果您嘗試使用全球不斷在C + +的多個文件你錯誤LNK2001 。一個辦法是包括常量初始化的一個頭文件,其中包括在您的頭。 cpp文件必要時,就好像它是一個函數原型。另一種辦法是使變數非恆定和使用時參考不斷評估它。

㈢ C語言如何實現頭文件不定義函數名,然後c文件里就不編譯該函數,或者其他能實現這樣效果的辦法

採用條件編譯即可。

在.h頭文件中加上

#if1
#defineFUNC_ENABLE
voidfun();
#endif

在.c中加上

#ifdefFUNC_ENABLE
voidfun(){printf("OK ");}
#endif

當我們不想編譯該函數時,加#if 1改為#if 0即可。

例子:

#include<stdio.h>

#if1
#defineFUNC_ENABLE
voidfun();
#endif

#ifdefFUNC_ENABLE
voidfun(){printf("OK ");}
#endif
intmain(void){
fun();
return0;
}

㈣ c語言的gets函數編譯不成功阿,很短的程序

C語言的gets函數一般包含在stdio.h頭文件里,如果沒有包含比頭文件那可能會有問題。第二種情況包含了還出問題,說明你的編譯器已經不支持這個函數了,這個函數非常不安全,容易造成溢出,建議換成fgets函數。

函數原型

char *fgets(char *buf, int bufsize, FILE *fp);

數解釋:

參數一是輸入字元串存放地址,

參數二是存放地址最大容量,

參數三是從哪裡輸入,可以從文件也可從輸入設備,如果從輸入設備輸入這個參數可以寫成stdin,如果從文件輸入此參數為文件指針。

返回值

輸入成功返回參數一,失敗返回NULL.

補充知識:

為什麼gets不讓用呢,我們可以看它的原型:char *gets(char *buf);

這個函數可以一直輸入知道換行或者EOF,它並不考慮buf空間是否足夠大能放下,這就容易導致溢出,有些別有用心的人就會利用這個漏洞去攻擊你的程序。

而fgets可以通過第二參數保證不會讀入超過buf空間的字元。

㈤ 我自己寫了一個函數定義在另一個.c文件中,已聲明,但編譯時報錯未定義

在定義函數的.c文件中包含聲明函數的.h文件。例如:

//f1.h
#include <stdio.h>
void func(int x);
//f1.cpp
#include "f1.h"
void func(int x)
{
//函數定義
}
//main.cpp
#include "f1.h"
void main()
{
int x = 2;
func(2);
}
閱讀全文

與函數c模板不能編譯相關的資料

熱點內容
win10運行linux 瀏覽:408
程序員帥哥照片生活照 瀏覽:413
婚戀心理學pdf 瀏覽:784
連接oracle資料庫命令 瀏覽:952
網易雲改id伺服器出現錯誤 瀏覽:318
程序員怎樣拿到36萬 瀏覽:11
linuxhttpd服務 瀏覽:568
解壓聲控2017 瀏覽:573
賽歐壓縮比102加幾號油 瀏覽:821
程序員了嗎 瀏覽:7
如何用命令打開本地用戶 瀏覽:708
中望cad分解命令 瀏覽:850
解壓到系統盤找不到了 瀏覽:590
空氣壓縮機電磁閥漏氣 瀏覽:844
mongodbpython教程 瀏覽:590
解壓系列蜘蛛俠救空難飛機 瀏覽:944
java解壓縮軟體下載 瀏覽:512
安卓怎麼用shadowsocksr 瀏覽:90
蘇州市常用的文件加密軟體 瀏覽:585
安卓手機怎麼玩怪物彈珠台服 瀏覽:433