我正在努力使用C ++模板。这是我的代码的简化版本。实际上,我将它分为.cpp和.h文件,但我只是简短地说明了问题。
#include <iostream>
template<typename T>
class GenericColor
{
};
template<typename T>
class RGB : public GenericColor<T>
{
public:
HSV toHSV();
};
class HSV : public GenericColor<double>
{
};
编译结果是:
prog.cpp:12:2: error: ‘HSV’ does not name a type
HSV toHSV();
^
答案 0 :(得分:4)
编译器从上到下读取。您需要转发声明HSV。
放:
class HSV;
之前class RGB
答案 1 :(得分:1)
当编译器读取RGB
的定义时,HSV
尚未定义
声明。你需要先申报。以下代码是正确的:
template<typename T>
class GenericColor
{
};
class HSV : public GenericColor<double>
{
};
template<typename T>
class RGB : public GenericColor<T>
{
public:
HSV toHSV();
};
有些情况下,在合适的情况下定义类并不容易 订购。在这种情况下,您可以声明您需要的那个,并定义它 后来。这被称为前向声明。请参阅以下代码:
#include <iostream>
template<typename T>
class GenericColor
{
};
class HSV; // the forward-declaration
template<typename T>
class RGB : public GenericColor<T>
{
public:
HSV toHSV();
};
// the definition of HSV
class HSV : public GenericColor<double>
{
};
答案 2 :(得分:0)
您需要先定义HSV
,然后才能从成员函数返回它。在这种情况下,只需将HSV
类def粘贴到RGB
类def。