注意:我做了一個DFH_lib.CPP,其中包括fstream和iomanip。我將所有的模板函數都保存在DFH_lib.CPP中。現在,如果我在MAIN.CPP中編寫剩餘的非模板函數並僅包含DFH_lib.h,則它將成功運行。我不明白爲什麼......鏈接器錯誤:重複函數
我正在使用模板製作數據文件處理庫。我創建了兩個文件:
DFH_lib.CPP
Lib_Test.CPP
我做了一個項目,並在編譯時點擊了「Build All」。我遇到了以下鏈接錯誤:
file_init(char near*) defined in module DFH_LIB.CPP is duplicated in module LIB_TEST.CPP
AddColumn(const int near&) defined in module DFH_LIB.CPP is duplicated in module LIB_TEST.CPP
file_init(char*);
和AddColumn(T data, const int& width);
和AddColumn(const int& width);
是,我只是在DFH_lib.CPP定義的功能。我只在Lib_Test.CPP中調用這些函數。
DFH_lib.CPP
template <class T> //Function belongs to Pretty Printing Libary
void AddColumn(T data, const int& width) {
cout<<setw(width)<<data<<" | ";
}
void AddColumn(const int& width) {
cout<<setw(width)<<setfill('_')<<"|";
}
void file_init(char* file) { //File initialization function
ofstream fout;
fout.open(file, ios::binary|ios::noreplace); //File Created, noreplace prevents data loss
fout.close();
}
,其中 「文件」 被定義爲Lib_Test.CPP
cout<<endl; AddColumn(record_id,7); AddColumn(char_member, 20); AddColumn(int_member, 11); AddColumn(float_member, 13);
file_init(file); //initializes the file
:爲什麼我得到char file[]="lib_Test.dat";
可能有人請解釋一下這個鏈接錯誤?我不明白這意味着什麼,因此,如何解決它......
編輯: 我注意到,這可能會導致由於同時包括文件,當我轉身的Lib_Test做了錯誤.CPP導入「Hello World」程序並出現相同的錯誤。還有一件事我注意到:只有非模板函數導致鏈接錯誤!
DFH_lib.CPP
#ifndef _DFH_lib_cpp
#define _DFH_lib_cpp
#include<fstream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
#include<string.h>
.....
#endif
Lib_Test.CPP
#include<iostream.h>
#include<conio.h>
#include"DFH_lib.CPP" //Including DFH Libary
您需要將'#definition'添加到**每個文件**,所以還要添加到'lib_Test.cpp',問題可能是模板的使用會創建一個已經存在的原型。如何定義'char_member'和'int_member'?如果它們是相同的,它可能是原因......包含層次結構看起來不錯,所以它是模板中的錯誤或者它的用法,我沒有看到沒有完整的源代碼...嘗試去做MCVE(最小可編譯的可驗證的例如...在你的情況下不編譯:)) – Spektre
給我一些時間,本週我有3個考試 –
在你用'@ spektre'發表評論之後通知我 – Spektre