Implicit default constructor is not available because base 'QuerySink' does not have an accessible default constructor
时间: 2024-02-16 09:05:00 浏览: 103
这个错误是因为您的类继承了一个没有可访问的默认构造函数的基类,即基类没有提供一个无参构造函数。解决方法是在派生类中显式定义一个构造函数,并通过成员初始化列表调用基类的构造函数。例如:
```cpp
class DerivedClass : public QuerySink {
public:
DerivedClass(int arg) : QuerySink(arg) {
// DerivedClass constructor code
}
// DerivedClass member functions
};
```
在上面的例子中,派生类 `DerivedClass` 显式定义了一个带有一个整型参数的构造函数,并通过成员初始化列表调用基类的构造函数。这样就可以在派生类中使用基类的成员了。
相关问题
widget.cpp:29:18: error: no matching conversion for static_cast from 'char [1024]' to 'Widget::Result' widget.h:46:13: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'char [1024]' to 'const Widget::Result' for 1st argument widget.h:46:13: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'char [1024]' to 'Widget::Result' for 1st argument widget.h:46:13: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided
这个错误发生的原因是你试图将一个 char 数组转换为 Widget::Result 类型的对象,但是 Widget::Result 类型没有定义接受 char 数组作为参数的构造函数或转换函数,因此编译器无法完成这个转换。
为了解决这个问题,你需要修改 Widget 类的构造函数,使其可以接受一个 char* 类型的指针,并将其转换为 Widget::Result 类型的对象。以下是一个示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class Widget {
public:
struct Result { int x; int y; };
Widget(char* data) {
memcpy(&result_, data, sizeof(Result));
}
Result* GetResult() {
return &result_;
}
private:
Result result_;
};
int main() {
char data[] = { 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 };
Widget widget(static_cast<char*>(data));
Widget::Result* result = widget.GetResult();
cout << "x: " << result->x << ", y: " << result->y << endl;
return 0;
}
```
在这个示例中,我们修改了 Widget 类的构造函数,使用 memcpy 函数将 char* 类型的指针转换为 Widget::Result 类型的对象。然后我们使用 static_cast 将 char 数组转换为 char* 类型的指针,并将其传递给 Widget 类的构造函数。这样就可以安全地访问 result_ 成员变量了。
Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
这个错误通常出现在您没有为您的自定义类显式定义构造函数时。如果您没有为您的类定义构造函数,Java会默认提供一个无参构造函数,但是如果您在您的类中定义了任何构造函数,Java将不再提供默认的无参构造函数。
要解决这个错误,您可以通过显式定义一个无参构造函数来创建一个默认构造函数。例如:
```
public class MyClass {
public MyClass() {
// 构造函数体
}
}
```
或者,如果您需要接受参数的构造函数,您可以创建一个带有参数的构造函数,并在其中调用super()方法来调用父类的构造函数。例如:
```
public class MyClass {
public MyClass(int parameter) {
super();
// 构造函数体
}
}
```
在这个例子中,我们调用了父类的无参构造函数,但是您也可以调用父类的带参数的构造函数。
阅读全文