none
使用模板的类声明和实现不能分文件??? RRS feed

  • 问题

  • 有一个类,代码如下:

    // CAClass.h
    template <typename T>
    class AClass
    {
      public:
        void func ();
    };
    
    
    
    // CAClass.cpp
    #include "CAClass.h"
    
    template <typename T>
    void CAClass<T>::func ()
    {
      // Implements.
    }

    声明和实现是分开两个文件存放的,就像一般的类一样,但是,编译时候不能通过,提示无法找到外部符号 func 。

    如果我将声明和实现放在同一个文件内就可以通过编译。

     

    有没有办法解决这个问题?

    2010年3月24日 8:37

答案

  • 模板类不能分两个文件,因为模板类在编译的时候就相当于宏定义,分两个文件是找不到的.除非你把这两个文件都包含进去,不然就会报错.

    比如你的模板一部分在a.h一部分在b.c那么你要想使用它就要#include"a.h" #include "b.c"

    你可以参考Win32下的STL库里面的模板库,也都是一个文件.


    0xBAADF00D
    • 已标记为答案 JasonMing 2010年3月24日 11:22
    2010年3月24日 8:46
    版主

全部回复

  • 模板类不能分两个文件,因为模板类在编译的时候就相当于宏定义,分两个文件是找不到的.除非你把这两个文件都包含进去,不然就会报错.

    比如你的模板一部分在a.h一部分在b.c那么你要想使用它就要#include"a.h" #include "b.c"

    你可以参考Win32下的STL库里面的模板库,也都是一个文件.


    0xBAADF00D
    • 已标记为答案 JasonMing 2010年3月24日 11:22
    2010年3月24日 8:46
    版主
  • 哦,明白了~~~谢谢~~~
    2010年3月24日 11:22