在我的Dll中使用模板类

时间:2017-02-07 14:23:37

标签: c++ templates dll

以下情况: 我在一个DLL中有一个模板类Point

namespace Image
{
     template<typename T> class Point
     {
     .
     .
     .

并在另一个dll中使用此类。该课程如下:

//Base.h
template<typename T> class Point;

class Base{
    Point<double> _Point;
};

//Child.h
#include "Base.h"
class Child : public Base{
    Child(Point<double> pt);
    doSth();
}

//Child.cpp
#include "Child.h"
#include "Point.h"

Child::Child(Point<double> pt){
    _Point = pt;                   
}
Child::dosth(){
    Point<double> p  = _Point;  // In this Row i get an "undefined type 'Point<double>' Error
}

为什么我收到错误的任何想法? 我的想法是完全错误的,在头文件中转发声明Point-Class并在.cpp中包含?

非常感谢,祝你有愉快的一天!

1 个答案:

答案 0 :(得分:0)

使用Base.h中的前瞻声明,如果您先使用using namespace Image;并不重要,那么您在Base.h中声明的模板类仍然在中全局名称空间,而不是Image名称空间。并且该声明将优先于Image命名空间中的声明。

所以这里确实有两个解决方案:明确使用Image::Point,或删除Base.h中的前向声明(并包含定义Image::Point<>的头文件)。