MyButton * m_pDevBtn[30] = new MyButton(this)
时间: 2024-02-11 12:06:55 浏览: 62
这个错误的意思是在你的代码中,你试图在定义`m_pDevBtn`成员变量时使用`new`运算符分配内存,但这种方式只能在类的构造函数中使用。
在C++中,类成员变量的初始化通常都是在构造函数中进行的。如果你需要在构造函数中为`m_pDevBtn`分配内存,你可以这样做:
```cpp
class MyClass {
public:
MyClass() {
for (int i = 0; i < 30; i++) {
m_pDevBtn[i] = new MyButton(this);
}
}
private:
MyButton * m_pDevBtn[30];
};
```
这样,在`MyClass`的构造函数中,将会为`m_pDevBtn`中的每个元素分配一个新的`MyButton`对象,并将`MyClass`的指针作为参数传递给构造函数。
需要注意的是,在类的定义中,你只能对成员变量进行声明,而不能进行初始化。如果你需要在类的定义中对成员变量进行初始化,可以使用类静态常量或枚举常量进行初始化,例如:
```cpp
class MyClass {
public:
static const int MAX_BUTTONS = 30;
private:
MyButton * m_pDevBtn[MAX_BUTTONS];
};
```
这样,在定义`m_pDevBtn`时,将使用常量`MAX_BUTTONS`进行初始化。
相关问题
m_pDevBtn[gBtnDevInfo.devInfoNum] = MyButton(this);
这行代码的意思是,将一个新创建的MyButton对象赋值给m_pDevBtn数组的第gBtnDevInfo.devInfoNum个元素。
但是,这样做是有问题的,因为MyButton类的复制赋值运算符被隐式删除,无法直接使用赋值运算符将一个MyButton对象赋值给另一个MyButton对象。因此,你需要使用MyButton类的复制构造函数来创建新的对象。
你可以将代码改为如下形式:
```cpp
m_pDevBtn[gBtnDevInfo.devInfoNum] = MyButton(*this);
```
这样,就使用了MyButton类的复制构造函数来创建一个新的MyButton对象,并将其赋值给m_pDevBtn数组的第gBtnDevInfo.devInfoNum个元素。注意,这里使用了解引用运算符*来获取this指针所指向的对象的引用,然后作为参数传递给MyButton类的复制构造函数。这样做可以避免使用赋值运算符,而是直接创建一个新的对象。
MyButton* button = qobject_cast<MyButton*>(widget);参数说明
这行代码的含义是将 QObject 类型的指针 widget 转换为 MyButton 类型的指针 button。其中,qobject_cast 是 Qt 框架提供的一个类型转换函数,用于将一个 QObject 对象转换为另一个 QObject 类型的对象。它的使用方式是:
```c++
QObject* qobject_cast<QObject*>(QObject* object);
```
其中,第一个模板参数为目标类型,第二个参数为待转换的对象指针。在本例中,目标类型为 MyButton*,待转换的对象指针为 widget。
需要注意的是,如果待转换的对象不是目标类型的实例,那么 qobject_cast 返回 null 指针。因此,在转换结束后,需要判断返回值是否为 null,以确保转换操作的正确性。
阅读全文