1
見下面我的演示代碼:A怪 '未定義參考' 錯誤使用g ++
b.hpp:
#ifndef B_HPP
#define B_HPP
namespace debug {
class test {
public:
template <class T> void foo(T a);
private:
int a;
};
}
#endif
b.cpp:
#include <iostream>
#include "b.hpp"
namespace debug {
template <class T>
void test::foo(T a) {
std::cout << "debug" << std::endl;
}
}
testb.cpp:
include "b.hpp"
int main(int agrc, char *argv[])
{
debug::test a;
int c = 5;
a.foo(c);
return 0;
}
我編譯它與
g++ -std=c++11 testb.cpp b.cpp'
,並得到一個錯誤:
/tmp/ccnjR5S4.o: In function `main':
testb.cpp:(.text+0x1c): undefined reference to `void debug::test::foo<int>(int)'
collect2: error: ld returned 1 exit status
什麼問題?
如果我把主函數放在b.cpp中並編譯b.cpp,沒關係。爲什麼?
謝謝!
簡短的回答,編譯器永遠不會實例化'測試:: foo'這樣的功能在任何時候都不存在。爲什麼它不能實例化?因爲完整的定義不可用。 –
greatwolf