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
时间: 2024-03-14 20:48:37 浏览: 120
widget(1).cpp
这个错误发生的原因是你试图将一个 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_ 成员变量了。
阅读全文