无法从参数中的Template类对象访问成员
Member is inaccessible from Template class object in parameter
我有一个类,它有一个函数,将模板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
访问私有或受保护的成员。
相关文章:
- 按基类对象访问派生类资源时出错
- 使用基类对象访问派生的仅类方法
- 从 const 对象访问非 const 方法
- 如何在C++中使用类对象访问指针数据成员
- 如何通过不同的指针使用类的对象访问结构?(链表)(C++)
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 为什么引用类型在使用临时对象访问时是左值
- 从父对象 c++ 访问子方法
- 无法通过指针或对象 c++ 访问受保护的成员
- 为什么可以从类中的对象访问类的私有变量
- 对类似"struct {double, int}"对象使用reinterpret_cast进行对象访问
- 通过无符号 char 别名进行对象访问,加载和存储时会发生什么?
- 从对象访问结构枚举
- 如何全局创建对象并使用该对象访问全局范围内的公共成员函数
- 在C 中,可以从第三个共享对象访问其他两个不同共享对象
- 如何在C 中提供一个可呼叫的对象访问,例如lambda
- C 向量对象访问
- C++是否可以从同级第二个派生对象访问第一个派生对象的受保护基础数据成员?
- 如何从类内实例化的对象访问私有变量
- 多态性:通过类文本或对象访问静态成员