编译虚拟C ++程序时链接不成功

时间:2013-09-03 07:29:09

标签: c++ linker g++

我有这个文件: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   退出状态

我做错了什么?

1 个答案:

答案 0 :(得分:6)

您可能想要了解the most vexing parse,因为当您这样做时

root::functs::f1<double> f();

您声明f是一个返回root::functs::f1<double>对象的函数。

您可能还想阅读this old question,了解实际出现undefined reference错误的原因。这是因为头文件没有完全定义类。对于模板化类,完整的实现也必须在头文件中。