以下情况: 我在一个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中包含?
非常感谢,祝你有愉快的一天!
答案 0 :(得分:0)
使用Base.h
中的前瞻声明,如果您先使用using namespace Image;
并不重要,那么您在Base.h
中声明的模板类仍然在中全局名称空间,而不是Image
名称空间。并且该声明将优先于Image
命名空间中的声明。
所以这里确实有两个解决方案:明确使用Image::Point
,或删除Base.h
中的前向声明(并包含定义Image::Point<>
的头文件)。