gpt4 book ai didi

c++ - protected 成员不能通过指针或对象访问

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:58 25 4
gpt4 key购买 nike

我有 2 个类 TrainingTesting,其中 Training 是基类,Testing 是派生类训练类。

我有Testing类成员函数,float totalProb(Training& classProb, Training& total),它有2个参数,都是Training类对象。代码:

void Testing::totalProb(Training& classProb, Training& total) {

_prob = (_prob * ((float)(classProb._nOfClass) / total._tnClass));
cout << "The probalility of the " << it->first << " beloning to " << classProb._classType << " is: " << _prob << endl;
}

基本上这个函数所做的是计算test1(Testing 类的一个对象)中属于class1(一个Training 类的对象)。

所有 Training 类(基类)变量都是 Protected 并且所有 Training 类函数都是 Public

当我尝试运行 test1.totalProb(class1, total); 时出现错误 Error C2248 'Training::_probCalc': cannot access protected member declared in class 'Training' 。我无法解决这个问题。

最佳答案

您正在尝试访问母类的另一个实例的成员:classProb,但是继承使您只能访问自己父类的 protected 成员。

一种纠正方法(但它在很大程度上取决于您尝试做什么)是在您的培训类(class)中放置一个 _probClass 的 getter 并在您的测试中调用它,例如 _probCalc成员:

public:
(Type) Training::getProbCalc() {
return _probCalc;
}

在循环中改变你的调用:

for (it3 = classProb.getProbCalc().begin(); it3 != classProb.getProbCalc().end(); it3++)

如果您试图访问您自己的成员,该成员由您的母亲实例继承,只需直接调用它们即可。例如:

for (it3 = _probCalc().begin(); it3 != _probCalc().end(); it3++)

关于c++ - protected 成员不能通过指针或对象访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34707932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com