C++ 构造错误:‘;数据’;未在此范围中声明

C++ 构造错误:‘;数据’;未在此范围中声明,c++,C++,我不知道为什么子类不能使用父类的变量。我曾经使用过java,但java中没有。我是C++初学者; 父类 #include <iostream> template<class T> class List{ protected: int length; T *data; public: List() { length = 0; data = nullptr; std::cout << "父

我不知道为什么子类不能使用父类的变量。我曾经使用过java,但java中没有。我是C++初学者;
父类

#include <iostream>

template<class T>
class List{
protected:
    int length;
    T *data;
public:
    List() {
        length = 0;
        data = nullptr;
        std::cout << "父类构造函数..." << std::endl;
    }

    virtual ~List() {
        length = 0;
        data = nullptr;
        std::cout << "父类析构函数..." << std::endl;
    }
}
#包括
模板
班级名单{
受保护的:
整数长度;
T*数据;
公众:
列表(){
长度=0;
数据=空PTR;

std::cout使用
此->数据
。这将解决您的问题。

  • 将调用从
    f()
    更改为
    this->f()
    。由于这在模板中始终是隐式依赖的,因此this->f是依赖的,因此查找将推迟到模板实际实例化,此时将考虑所有基类

  • 在调用
    f()
    之前,使用B::f;
插入

  • 将调用从
    f()
    更改为
    B::f()
    。但是,请注意,如果f()是虚拟的,则这可能无法满足您的需要,因为它会禁用虚拟分派机制


  • 试试<代码> ->数据=…./Cord>。请参见My.Ex.!因为我必须用C/C++编写数据结构,但我以前使用java,我是C++初学者。我去看看。
    #include "List.h"
    
    template<class T>
    class ArrayList : public List<T> {
    private:
        const int INIT_SIZE = 10;
        const int INCREMENT_SIZE = 10;
    
        int maxSize;
    
    
    public:
        ArrayList() {
            std::cout << "子类构造函数..." << std::endl;
            data = new T[INIT_SIZE];
            maxSize = INIT_SIZE;
        }
    
        virtual ~ArrayList() {
            std::cout << "子类析构函数..." << std::endl;
            maxSize = 0;
        }
    }
    
    In constructor ‘ArrayList<T>::ArrayList()’:
    
    error: ‘data’ was not declared in this scope
             data = new T[INIT_SIZE];
             ^~~~