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都是相关的,第一个版本使用类成员访问查找,第二个版本使用限定名称查找.
| 归档时间: |
|
| 查看次数: |
15299 次 |
| 最近记录: |