-2
我有一個簡單模板函數定義的模板函數,C++調用單獨的頭和cpp文件
阿
#include <iostream>
#include <vector>
using namespace std;
template<class T>
pair<T, T> GetMatchedBin(T, vector<pair<T, T> >);
A.cpp
#include "A.h"
template<class T>
pair<T, T> GetMatchedBin(T val, vector<pair<T, T> > &bins)
{
for(unsigned int i=0; i<bins.size(); i++){
if(val >= bins[i].first && val < bins[i].second)
return bins[i];
}
return pair<T, T>();
}
我通過打電話,
main.cpp
#include <iostream>
#include <vector>
#include "A.h"
using namespace std;
int main()
{
vector<pair<int, int> > bins;
bins.push_back(pair<int, int>(0, 1));
bins.push_back(pair<int, int>(1, 2));
bins.push_back(pair<int, int>(2, 3));
bins.push_back(pair<int, int>(3, 4));
pair<int, int> matched_bin = GetMatchedBin(3, bins);
cout << matched_bin.first << ", " << matched_bin.second << endl;
return 0;
}
然而,當我嘗試編譯此我得到的錯誤,
make
g++ -o temp temp.cpp A.o
/tmp/dvoong/ccoSJ4eF.o: In function `main':
temp.cpp:(.text+0x12a): undefined reference to `std::pair<int, int> GetMatchedBin<int>(int, std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > >)'
collect2: ld returned 1 exit status
make: *** [temp] Error 1
奇怪的是,如果我做的這一切都在一個文件中,而不是分成頭和.cpp文件,然後它工作.. 。
任何想法是什麼造成這種情況?
感謝
見http://stackoverflow.com/q/495021/951890 –