问题:33978185和32569833并没有帮助我。
顺便说一句,问题33978185,这个错误被认为是一个错误,但是自从我使用VS2017以来,我认为现在应该修复它。
问题40181845使用结构,但我不太了解...
问题38469597说,我应该结交B类-朋友课堂,这里也是这种情况吗?
我试图寻找更多的解决方案,但我还没有得到我所需要的。
约束我对面向对象c ++的编程知识水平:高级>普通>入门。
我很正常。
我有A类和B类:
class A
{
protected:
int q;
int w;
public:
A(int);
functionE();
functionR();
};
class B:public A
{
public:
functionT();
};
在main
中,当我想创建类B
的对象时,出现错误:
默认的构造函数“对象名”不能被引用-它是一个已删除的函数。
根据我对面向对象编程的了解,当某些成员受到保护时,继承的类可以访问它们,并且如果继承是公共的,则可以访问公共功能。
我希望我的B类有奖金functionT()
,但别无其他,但是正如我所说,我可以访问受保护的类成员。
一种解决方案是在类functionT()
中实际编写A
的代码,这消除了对类B
的需要,但我不希望这样。
我该怎么办?
答案 0 :(得分:3)
当您尝试创建B
的对象时,由于未声明任何构造函数而收到错误消息。 A
不能具有默认构造函数,因为A(int)
也没有默认构造函数(当您将A
声明为A() = default
构造函数时,会隐式删除默认构造函数)。
您可以为A创建默认的构造函数,或者通过B() : A(0) {}
B(int i) : A(i) {}
或为B创建一个构造函数,
Observable
答案 1 :(得分:0)
由于您具有类B
的自定义构造函数,因此需要由类B
的构造函数调用。
生成的类A
的“空”构造函数尝试调用类B
的“空”之一,该类不再可用。因此,您还需要为class B : public A
{
public:
B() : A(0) {}
/* or */
B(int v) : A(v) {}
};
写一个构造函数。
class B
答案 2 :(得分:0)
通过向构造函数A()
提供默认构造函数B
,可以删除它们。但是,在创建类A
的实例时,它必须调用其超类B
的构造函数。您提供的唯一方法是调用默认构造函数,该构造函数不再存在,因此您的代码无法编译。
要使其编译,您需要告诉A
应该如何构造B
。例如,您可以将此构造函数添加到B(int a) : A(a) {}
:setTimeout(() => {
var colorThief = new ColorThief();
var imgObj = new Image();
var count = 0;
for (i = 0; i < assetsArray1.length; i++) {
if (i % 2 == 0) {
// get currency symbol
/*var curr_sign = "$";
curr_sign = formatter.format(totalvalue1).replace(/[0-9]/g, '').replace(",", "").replace(".", "").replace(" ", "");*/
allocation_chart.data.labels[i / 2] = assetsArray1[i];
imgObj.src = 'icon/' + assetsArray1[i].toLowerCase() + '.png';
imgObj.onload = function () {
count += colorThief.getColor(imgObj)[0];
console.log(count);
};
} else {
allocation_chart.data.datasets[0].data[i / 2 - 0.5] = price1_[i / 2 - 0.5].toFixed(2);
}
}
allocation_chart.update();
},
100);