模板继承c ++

yon*_*nka 16 c++ inheritance templates

我是c ++的新程序员.我第一次使用模板.

我有一个抽象类和另一个扩展它的类.但是抽象类的所有受保护成员都不被其他类识别:

class0.h:

template<class T>
class class0 {

protected:
    char p;
public:
    char getChar();
};

**class1.h**
template<class T>
class class1:public class0<T> {
public:
    void printChar();
};
template<class T>
void class1<T>::printChar(){
    cout<< p<<endl;//p was not declared in this scope
}
Run Code Online (Sandbox Code Playgroud)

谢谢.有一个伟大的一周=)

CB *_*ley 26

发生这种情况的原因是与模板的查找规则有关.

p不是依赖表达式,因为它只是一个标识符,而不是依赖于模板参数的东西.这意味着将不会搜索依赖于模板参数的基类来解析名称p.要解决此问题,您需要使用取决于模板参数的内容.使用this->会这样做.

例如

cout << this->p << endl;
Run Code Online (Sandbox Code Playgroud)


Joh*_*itb 15

要在依赖基类中查找名称,需要满足两个条件

  • 查找不是不合格的必要
  • 这是必要的,这个名字是依赖

C++ 03中陈述的这些规则与未经修改的C++ 98规定的规则不同,后者满足第二个项目符号(使名称相关)足以查找在从属基类中声明的名称.

在实例化时查找依赖名称,并且除非非限定查找之外的查找不会忽略依赖基类.需要满足这两个条件才能找到在依赖基类中声明的名称,单独使用它们都不够.要满足这两个条件,您可以使用各种结构

this->p
class1::p
Run Code Online (Sandbox Code Playgroud)

两个名称p都是相关的,第一个版本使用类成员访问查找,第二个版本使用限定名称查找.