无法从参数中的Template类对象访问成员

Member is inaccessible from Template class object in parameter

本文关键字:对象 访问 成员 Template 参数      更新时间:2023-10-16

我有一个类,它有一个函数,将模板List对象作为参数。使用这个列表对象,我应该:

//receives a List of NVPair objects and sets the data value in a data member
//of an object in the list according to the corresponding name in the name - value pair

这是我的类和函数:

class Cartoon : public Object {
    string type;
    string name;
    string likes;
public:
    void set(const List<NVPair<string, string>, 10>&& list) {
        //set to this
        list.objArray[0] 
    }
};

这是列表模板类:

template<typename T, int MAX>
class List {
    T objArray[MAX];
    int index;
public:
    List() : index(0) {}
    size_t size() const {
        return index;
    }
    const T& operator[](int i) const {
        //try {} shit
        return i <= MAX && i >= 0 ? i : -1;
    }
    void operator+=(const T& t) {
        objArray[index++] += t;
    }
    void operator+=(T&& t) {
        objArray[index++] += move(*t);
    }
};

为什么我不能访问成员objArray?它说无法访问该成员。

第一个模板参数是另一个类模板NVPair。它是:

template<typename N, typename V>
class NVPair {
    N name;
    V value;
public:
    NVPair() :name(""), value("") {}
    NVPair(N n, V v) : name(n), value(v) {}
    N name() const { return name; }
    V value() const { return value; }
};

我尝试将数据成员设置为"受保护"而不是"私有",但这没有任何更改。我还试着设置

void set(const List<NVPair<string, string>, 10> && list)

作为指针类型,一个引用,没有引用或指针,但没有任何变化。无法访问该成员。我认为我的参数是错误的,但我不确定它出了什么问题。

也是Cartoon派生的Object类:

class Object {
public:
    virtual void set() = 0;
    virtual const std::string getDSV(char c = VALUE_DELMINITER) const = 0;
};

这是调用设置函数的代码

auto list = new List <T, OBJECTS_PER_JSON_FILE>();
auto members = new List <NVPair <std::string, std::string>, DATA_MEMBERS_PER_OBJECT>();
//inside a switch loop
case OBJECT_CLOSE:
obj.set(*members);
(*list) += obj;
delete members;
members = nullptr;
break;

我尝试将数据成员设置为受保护而非私有,但这不会改变

这是因为您访问Cartoon::集中的list,它与您的列表完全无关(在继承方面)。因此,您无法从list访问私有或受保护的成员。