呼叫模板類出現 undefined reference 錯誤的解決方法
g++不支援模板類的分離編譯,因此模板的實現最好都些在.h檔案中,否則將出現undefined reference to XXXX 的錯誤。下面是一個出錯的例子,解決方法就是將unilinklist.c中的程式碼移到unilinklist.h中。
//unilinklist.h
#ifndef UNILINKLIST_H_INCLUDED
#define UNILINKLIST_H_INCLUDED template <typename T>
class Unilinklist
{
public:
typedef struct Node
{
Node *next ;
T data;
}Node;
Unilinklist();
Unilinklist(Unilinklist<T>& o_link);
Unilinklist(T data, int length);
~Unilinklist(); int getlength();
void* gethead();
bool travelover();
void copyself(Node** tothird);
bool isempty();
void add_back(T data);
void del_back();
bool insert(int pos, T data); private: Node* head ;
Node* prevent;
Node* end;
int count ; }; template <typename T>
Unilinklist<T>::Unilinklist()
{
prevent = end = head = new Node;
count = 0;
}
template <typename T>
Unilinklist<T>::Unilinklist(T data, int length)
{
count = 0;
prevent = end = head = new Node;
while(length-- > 0)
{
prevent = new Node;
prevent->data = data;
end->next = prevent;
end = prevent;
end->next = NULL;
count++;
}
}
template <typename T>
Unilinklist<T>::Unilinklist(Unilinklist<T>& o_link)
{
count = 0;
prevent = end = head = new Node;
o_link.copyself(&head);
end = prevent = head->next;
while(prevent->next != NULL)
{
prevent = prevent->next;
end = prevent;
count++;
//cout<< count << endl;
}
end->next = NULL;
}
template <typename T>
Unilinklist<T>::~Unilinklist()
{
while (head->next != NULL)
{
del_back();
//cout <<count<<endl;
}
} template <typename T>
int Unilinklist<T>::getlength()
{
return count;
}
template <typename T>
bool Unilinklist<T>::travelover()
{
std::cout << "********The data is:*******" << std::endl;
prevent = head->next;
while (prevent == NULL)
return false; do
{
std::cout<<prevent->data<<std::endl;
prevent = prevent->next;
}
while(prevent != NULL);
std::cout << "*******The end************\n"<<std::endl;
return true;
}
template <typename T>
void* Unilinklist<T>::gethead()
{
return head;
}
template <typename T>
void Unilinklist<T>::copyself(Node** tothird)
{
std::cout<<"Copy constructor is running"<<std::endl;
Node* temp;
Node* tempre;
Node* tempend;
temp = new Node;
tempend = tempre= temp;
prevent = head->next;
while(prevent != NULL)
{
tempre = new Node;
tempre->data = prevent->data;
prevent = prevent->next;
tempend->next = tempre;
tempend = tempre;
tempend->next = NULL;
} *tothird = temp;
std::cout<<"Copy success"<<std::endl;
}
template <typename T>
bool Unilinklist<T>::isempty()
{
return (head->next == NULL);
}
template <typename T>
void Unilinklist<T>::add_back(T data)
{
prevent = new Node;
prevent->data = data;
end->next = prevent;
end = prevent;
end->next = NULL;
count++;
}
template <typename T>
void Unilinklist<T>::del_back()
{
prevent = head;
while (prevent->next->next != NULL)
{
prevent = prevent->next;
}
if(prevent->next != NULL)
{
end = prevent;
delete(prevent->next);
end->next = NULL;
count--;
}
// cout<<count<<endl; }
template <typename T>
bool Unilinklist<T>::insert(int pos, T data)
{
if(pos > count)
{
std::cout<<"The position is wrong" <<std::endl;
return false;
}
prevent = head;
while(--pos != 0)
{
prevent = prevent->next;
}
Node* temp = new Node;
temp->data = data;
temp->next = prevent->next;
prevent->next = temp;
return true;
} #endif // UNILINKLIST_H_INCLUDED
//test.c
#include <iostream>
#include "unilinklist.h"
int main()
{
std::cout << "Default Constructor:\n" << std::endl;
Unilinklist<int> lk1(325, 6);
lk1.add_back(1);
lk1.add_back(2);
lk1.add_back(8);
lk1.add_back(9);
lk1.add_back(88);
lk1.insert(3, 3233539);
lk1.travelover();
lk1.del_back();
lk1.travelover();
Unilinklist<int>lk2 = lk1;
lk2.travelover();
lk2.del_back();
lk2.travelover();
return 0;
}
相關推薦
呼叫模板類出現 undefined reference 錯誤的解決方法
除錯了一上午,搞了半天是這個g++編譯器本身的問題,模板類果然是個麻煩的傢伙。 g++不支援模板類的分離編譯,因此模板的實現最好都些在.h檔案中,否則將出現undefined reference to XXXX 的錯誤。下面是一個出錯的例子,解決方法就是將unilink
使用Dev C++編譯C++工程時出現undefined reference 錯誤
我的工程包含三個檔案,Vector模板類的宣告檔案Vector.h和定義檔案Vector.cpp以及主函式main.cpp,具體程式碼如下: // Vector.h #ifndef VECTOR_H #define VECTOR_H #include <iostream>
安裝Matlab出現Error 1935錯誤解決方法
技術 啟動 運行 十進制 gist log ror oca 下拉菜單 1、開始 - 運行(輸入regedit.exe)- 確定或者回車,打開註冊表編輯器; 2、在打開的註冊表編輯器中找到:HKEY_LOCAL_MACHINE ,並展開:HKEY_LOCAL_MACHINE
SpringMVC提交數據遭遇基礎類型和日期類型報400錯誤解決方法
筆記 運行 inpu 遭遇 imp public 增加 試用 too 使用SpringMVC開發的時候,頁面如果有日期格式的數據,後臺接受也是java.util.Date,則報告400錯誤 。下面是解決方案的演示示例: 這個是實體類,裏面createDate就是ja
navicat連線資料庫的時候出現1045的錯誤解決方法
使用navicat連線資料庫的時候出現了1045的錯,那肯定是你的賬號密碼填錯了,新版的mysql的一般不會出現這個錯誤,當你確定你的密碼沒有填錯的時候,你可以重啟伺服器嘗試一下,當你操作伺服器的時候,有可能在你操作完畢以後出現殭屍程序的出現,這時候就需要你重啟伺服器了,要是重啟伺服器依然不成功,那
sql 更新date欄位報“格式程式碼出現兩次”錯誤解決方法.
原來報錯的語句:update COMPANY_RECORD t set t.valid_date = to_date('2014/11/13 12:00:00','yyyy/MM/dd HH:mm:ss '); 正確的語句:update COMPANY_REC
“Internet連線共享訪問被啟用時,出現了一個錯誤” 解決方法
本人電腦Win7,前段時間還能共享本地連線給無線上網,現在共享的時候卻莫名的出現了錯誤:“Internet連線共享訪問被啟用時,出現了一個錯誤”。 通過查詢得到共享需要開啟服務"Internet Connection sharing",在執行中輸入services.ms
PHP 編譯安裝時出現 undefined reference to `libiconv' 錯誤的解決方法
原文:http://flyfishes.blog.51cto.com/3527694/819693 手動編譯PHP安裝時遇到如下錯誤 /usr/local/src/php-5.3.10/ext/xmlrpc/libxmlrpc/encodings.c:73: und
(用iis呼叫com來操縱Excel) 檢索 COM 類工廠中 CLSID 為{00024500-0000-0000-C000-000000000046} 的元件時失敗,原因是出現以下錯誤: 80070005。8000401A的錯誤解決方法
.NET匯出Excel遇到的80070005錯誤的解決方法: 檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046}的元件時失敗,原因是出現以下錯誤: 80070005基本上.net匯出excel檔案,都需要如此配置一下,不配置有的時候沒錯,而
關於Cmake 連結靜態庫出現undefined reference to錯誤
在編寫一個C++專案的時候,使用cmake管理工程,成功連結一個靜態庫,但是在編譯時仍然出現undefined reference to 的錯誤。 最終發現問題是由於c和c++混編導致的。 解決方案: 由於我連結的庫是使用c語言編寫,所以需要在include標頭檔案時加上 #
Linux Ubuntu執行執行緒程式出現undefined reference to ‘pthread_create’和undefined reference to ‘pthread_join’錯誤。
Linux Ubuntu執行執行緒程式出現undefined reference to ‘pthread_create’和undefined reference to ‘pthread_join’錯誤。 編寫好執行緒程式碼,進行編譯 gcc xiancheng.c -o xiancheng 出
linux 連結庫檔案出現“undefined reference to" 問題的解決方法
最近在Linux下程式設計發現一個詭異的現象,就是在連結一個靜態庫的時候總是報錯,類似下面這樣的錯誤: (.text+0x13): undefined reference to `func' 關於undefined reference這樣的問題,大家其實經常會遇
解決使用NDK進行編譯時出現undefined reference to function的問題
之前在編譯jni時出現了undefined reference to function這個問題,查閱相關資料說是可能連結的庫問題,然後通過各種gcc調整順序解決了這個問題。這個工程是導師的工程,工程在Linux環境下執行無誤,我從Linux環境往Android
c/c++中出現“undefined reference to”的解決
undefined reference to”的意思是,該函式未定義。 如果使用的是gcc,有以下檢查方案: 如果提示未定義的函式是某個庫的函式。檢查庫時候已經安裝,並在編譯命令中採用-l和-L引數匯入庫。 如果提示未定義的函式是程式中的函式。檢查是否在標頭檔案中宣告
Latex:IEEE會議模板中出現undefined control sequence \includegraphics問題解決方法
最近要參加一個IEEE主辦的國際會議,使用中官網提供的Latex模板寫論文,當插入EPS格式的圖片時,提示錯誤:undefined control sequence \includegraphics。 說明Latex無法識別\includegraphics, 在前面的程
在linux下靜態連結庫存在,但是在連結過程會出現undefined reference的錯誤
如題,使用linux編譯程式時,需要靜態連結庫。 在連結過程也已指定靜態庫的路徑及庫名,且連結器能找到指定的庫,但會提示庫中被呼叫的函式undefined reference 這是需要檢查連結庫在連結命令中的位置,要保證依賴該庫的中間檔案或庫在它的前面。 即若一個程式需要l
ubuntu 使用sudo apt-get update 出現 被配置多次導致無法升級錯誤解決方法
code 開發機 goup 使用 lin logs 配置 周末 ubun 這個周六周末在考慮升級自己GPU開發機,在琢磨使用docker來按轉tensorflow環境,在升級軟件的時候爆出了如下錯誤 在 /etc/apt/sources.list.d/sogoupin
yum 下載時出現錯誤解決方法
yum1,ping www.baidu.com 驗證你是否能夠上網2,ping 223.5.5.5 ping域名不通,ping外網地址時通了,你的DNS配置有問題。3,修改DNS網卡的配置文件 如: cp /etc/sysconfig/network-scripts/ifcfg-eth0 /t
VS2017試用期到期後登錄微軟賬戶出現錯誤解決方法
試用 mini could not identity install trac sig nbsp connected 關於使用VS2017試用期一個月到後,需要登錄微軟賬戶後進行認證後才能重新使用,但是登錄成功後出現如下錯誤 We could not refresh the
HTML使用post方式提交中文內容出現亂碼的錯誤解決方式
form 輸出 itl title com println orm doctype ctype 今天在做一個例子的時候,使用post方式提交表單,如果有中文的話,在另一個頁面顯示出來的時候,總是會出現亂碼; 但是將提交方式改為get的時候,就不會出現這種錯誤。 詳細錯誤