C++ 将模板类与非模板类放在同一cpp文件中时出现链接错误-C++;

C++ 将模板类与非模板类放在同一cpp文件中时出现链接错误-C++;,c++,linker-errors,template-classes,C++,Linker Errors,Template Classes,当我在同一个.cpp文件中包含模板类和非模板类时,我有一个链接时间问题 我经历了C++ FAQ 35.13,35.14,35.15,但不能解决这个问题。 我使用的是带有叮当声的Xcode 5 下面是一个例子 巴福 类栏{ 公众: void barfunc(); }; 模板 福班{ 公众: void foofunc(); }; 以下是cpp文件: barfoo.cpp void bar::barfunc(){…我的代码…} 模板 void foo::foofunc(){…我的代码…} //我还

当我在同一个.cpp文件中包含模板类和非模板类时,我有一个链接时间问题

<>我经历了C++ FAQ 35.13,35.14,35.15,但不能解决这个问题。

我使用的是带有叮当声的Xcode 5

下面是一个例子

巴福
类栏{
公众:
void barfunc();
};
模板
福班{
公众:
void foofunc();
};
以下是cpp文件:

barfoo.cpp
void bar::barfunc(){…我的代码…}
模板
void foo::foofunc(){…我的代码…}
//我还将模板类foo的一个实例放在.cpp文件中
模板类foo;
//但是仍然会产生链接错误
错误是

叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)

但是当我删除bar类时,错误消失了,有人能告诉我为什么它会产生这个错误吗


将定义放在头文件中可以解决这个问题,但它可能会导致另一个问题,即代码膨胀,有人可以提供其他解决方案吗?

我发现了这个问题,问题是我没有将模板类实例化为我在代码中使用的类型

以下是解决模板实例化问题的解决方案:

  • 将定义放在头文件中,以便编译器获得实例信息。(缺点,增加了加载和编译时间)

  • 实例化代码中使用的所有类型


  • 实例化没有帮助。您不能将适用于所有
    t
    的定义放在不同的翻译单元中。感谢您的快速响应,那么我应该如何避免此错误?如果您为所有
    t
    定义它,它需要放在标题中,或者以其他方式包含在标题中(例如,标题底部包含定义的文件)。换句话说,将方法
    foofunc
    的定义也放入标题中。
    class bar{
    public:
       void barfunc();
    };
    
    template <class T>
    class foo{
    public:
       void foofunc();
    };
    
    void bar::barfunc(){...my code...}
    template <class T>
    void foo<T>::foofunc() {...my code...}
    //I also put a instance of template class foo in the .cpp file
    template class foo<int>;
    //But is still generates the link error