收到的C 错误
C++ error received
本文关键字:错误 更新时间:2023-10-16
我有此代码:我收到下一个错误:A :: A(int)候选人期望1个参数,0提供了0,但我不明白问题是什么。
#include <iostream>
using namespace std;
class A
{
int x;
public:
A(int i):x(i) {}
int get_x() const {return x;}
};
class B:public A
{
int *y;
public:
B(int i):A(i) {y=new int[i]; for(int j=0;j<i;j++) y[j]=1;}
B(B&);
int &operator[] (int i) {return y[i];}
};
B::B(B&a)
{
y=new int[a.get_x()];
for(int i=0;i<a.get_x();i++) y[i]=a[i];
}
ostream& operator<<(ostream& o, B a)
{
for(int i=0;i<a.get_x();i++) o<<a[i];
return o;
}
int main()
{
B b(5);
cout<<b;
return 0;
}
,因为A
没有构造函数,该构造函数您需要使用从A
继承的任何类构造器提供的参数明确调用构造函数,在这种情况下为B
。
在您的第一个构造函数中:
B(int i):A(i) {y=new int[i]; for(int j=0;j<i;j++) y[j]=1;}
您通过致电A(i)
。
但是在您的第二个构造函数中:
B::B(B&a)
{
y=new int[a.get_x()];
for(int i=0;i<a.get_x();i++) y[i]=a[i];
}
没有呼叫A
的构造函数,因此您会遇到错误,因为编译器不知道如何创建A
对象,您可能打算要做:
B::B(B&a) : A(a.get_x())
{
y=new int[a.get_x()];
for(int i=0;i<a.get_x();i++) y[i]=a[i];
}
您的第二个B
构造函数B::B(B&a)
隐式尝试使用其默认构造器来构造基类A
,该构造器未定义。
您可以明确调用A(int)
构造函数,即:
B::B(B&a)
: A(a.get_x())
{
...
问题是在声明类型B
的对象时,您还需要构造A
的实例。在B::B(B&a)
中,您不明确调用A
的任何构造函数,因此编译器尝试调用无参数A::A()
的构造器,但由于未声明而失败。
您必须在A
中声明A::A()
或从B
的Conductror中明确调用A
中可用的构造函数之一。
请注意,A::A()
可以由编译器自动生成,称为默认构造函数。在此处阅读更多有关它的信息
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'