模板类继承模板类

今天写的代码提交到OJ上就出现这样的错误,但是vs并不会出错。

‘_elem‘ was not declared in this scope

原因在于模板类继承模板类,子类看不见父类的成员。

但是VC++做了一些小拓展,可以不适用this->就调用父类成员。

gcc在扫描到模板类时就要求确定每一个成员在哪里声明的,VC++在类实例化之后再检测,就不会有这个问题。

可以使用以下方式解决:

方法1:

使用this

template<typename T>
class A
{
protected:
    int x;
};

template<typename T>
class B:public A<T>
{
public:
    foo(this->x=0);
};

方法2:

使用A<T>::

template<typename T>
class A
{
protected:
    int x;
};

template<typename T>
class B:public A<T>
{
public:
    foo(A<T>::x=0);
};
时间: 2024-10-14 02:05:24

模板类继承模板类的相关文章

C++——类继承以及类初始化顺序

对于类以及类继承, 几个主要的问题:1) 继承方式: public/protected/private继承. 这是c++搞的, 实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可以把基类真实还原, 而private继承则完全把基类屏蔽掉. 这种屏蔽是相对于对象层而言的, 就是说子类的对象完全看不到基类的方法, 如果继承方式是private的话, 即使方法在基类中为public的方法. 但继承方式并不影响垂直方向的访问特性, 那就是子类的函数对基类的成员访问是不受继承方式的影

EF中多表公共字段,以及设置EntityBase使所有实体类继承自定义类

使用EF框架访问数据库时,如果某些表具有公共字段,例如在审核流程中,对于各类申请单资料的创建人.创建时间.修改人.修改时间,这些可能多表都需要的字段,如果在每个实体中进行赋值操作显然是类似和重复的,下面是一个统一在数据提交时进行赋值的例子(经简化,如果只是为记录时间并不用这么做),记录如下: 1. 创建一个公用接口IAudited,包含公用字段,申请单实体类继承这个接口. 2. 定义一个抽象类DbEntity(用dbml文件的EntityBase属性,使数据库实体类都继承自此类),定义OnSav

Properties类继承HashTable类,一般用来给程序配置属性文件。

package com.itcast.demo04.Prop; import jdk.internal.util.xml.impl.ReaderUTF8;import sun.nio.cs.UTF_32;import sun.nio.cs.ext.GBK; import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;impor

类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

 1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPushButton> #include <QLabel> template<class T> class run { public: T w; void show() { w.show(); } void settext() { w.setText("A"); }

模板的继承

会用继承,会用一些模板, 但是模板的继承是什么鬼: 百度如下: 模板类的继承包括四种: 1.(普通类继承模板类) template<class T> class TBase{ T data; …… }; class Derived:public TBase<int>{ …… }; 2.(模板类继承了普通类(非常常见)) class TBase{ …… }; template<class T> class TDerived:public TBase{ T data; ……

【python】-- 类的多继承、经典类、新式类

继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了,就是:子类可以继承多个父类,就叫多继承. class SchoolMember(object): #SchoolMember类 '''学校成员基类''' def tell(self): print("the schoolmeber is tell...") class School(ob

面向对象【day07】:类的属性-继承-经典类

本节内容 类的公有属性 析构函数 类的继承 新式类和经典类 一.类的公有属性 一.概述 前面我们讲了类的私有属性,现在我们来说说类的公有属性,这边很容易被人弄混淆,有人觉的,在__init__()构造方法中,除了私有属性,其他的都是公有属性了,其实这是一个错误的结论,并不是定义在__init__()初始化方法中的属性是公有属性(除私有属性),那什么是公有属性呢?揭起了大家的好奇心. 定义:指的是所属这个类的所有对象,都可以访问的属性,叫做公有属性. 二.公有属性 2.1 定义 说明:在类中直接定

继承和类设计

========================== ========================== oc是一门面向对象的语言,面向对象编程有三大特性:封装.继承.多态 一.封装 [注]封装就是把某些解决一些问题的代码进行模块化,对外部暴露一个接口.我们都称为封装了一个方法: [优点] 1.封装可以增强代码的复用度. 2.封装可以有效提高开发速度. 二.继承 子类拥有了父类的方法和属性的情况,我们称为继承: A:B(读作:A类继承B类,也就A类拥有了B类的方法和属性) [优点] 1.不用书

JAVA学习第二十二课(多线程(二))- (多线程的创建方式一 :继承Thread类)

线程是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 创建新执行线程有两种方法. 一种方法是将类声明为 Thread 的子类.该子类应重写Thread 类的run 方法.另一种方法是声明实现 Runnable 接口的类.该类然后实现run 方法. 创建线程方式一:继承Thread类 一.创建线程的步骤: 1.定义一个类继承Thread类 2.覆盖Thread中的run()方法 3.直接创建Thread类子类的对象 4.调用start方法开启线程,并调用线程的任务run方法