我有这个文件:myfuncts.hpp
:
#ifndef FUNCTS_
#define FUNCTS_
namespace root {
namespace functs {
template <typename T>
class f1 {
public:
T r;
f1();
};
}
}
#endif
我有实施:myfuncts.cpp
:
#include "myfuncts.hpp"
template <typename T>
root::functs::f1<T>::f1() { /* do somethng */ }
然后我有我的主要例程:
#include "impulses.hpp"
int main(int argc, char** argv);
int main(it argc, char** argv) {
root::functs::f1<double> f();
}
我编译它:
g++ main.cpp functs.cpp
得到了这个:
/tmp/ccrdJEQt.o:在函数
main': main.cpp:(.text+0x53): undefined reference to
root :: functs :: f1 :: f1()'collect2:ld返回1 退出状态
我做错了什么?
答案 0 :(得分:6)
您可能想要了解the most vexing parse,因为当您这样做时
root::functs::f1<double> f();
您声明f
是一个返回root::functs::f1<double>
对象的函数。
您可能还想阅读this old question,了解实际出现undefined reference
错误的原因。这是因为头文件没有完全定义类。对于模板化类,完整的实现也必须在头文件中。