当我试图返回值时,我在smtdplugin实现文件中得到这个错误。好的,我知道我正在创建一个指向QAction的指针,当我试图返回它时,我不能这样做,因为我的方法正在等待对一个对象的引用。但是我不知道该如何行动(我是个乞讨者)如何避免这个问题,并成功地返回该对象
#include "smtdplugin.h"
QAction SmtdPlugin::newItem() {
QAction *item = new QAction(NULL);
return item; // here i get error
}
Q_EXPORT_PLUGIN2(smtdplugin,SmtdPlugin);头文件:
#ifndef SMTDPLUGIN_H
#define SMTDPLUGIN_H
#include <QObject>
#include <QAction>
#include "smtdinterface.h"
class SmtdPlugin : public QObject,SmtdInterface {
Q_OBJECT
Q_INTERFACES (SmtdInterface)
public :
QAction newItem();
};
#endif // SMTDPLUGIN_H接口类:
#ifndef SMTDINTERFACE_H
#define SMTDONINTERFACE_H
#include <QAction>
class SmtdInterface {
public:
virtual ~SmtdInterface() {}
SmtdInterface();
virtual QAction newItem () = 0;
};
Q_DECLARE_INTERFACE(SmtdInterface,"com.trololo.Plugin.SmtdInterface/1.0")
#endif 发布于 2011-11-23 22:32:31
当您执行return item时,您将返回一个指向QAction的指针,但是根据函数的声明,您将返回一个QAction,因此会出现错误。
所以,你应该这样做:
QAction* SmtdPlugin::newItem() {
QAction *item = new QAction(NULL);
return item;
}发布于 2011-11-23 22:31:08
我不熟悉qt,但错误是-
QAction* SmtdPlugin::newItem() // Return type should be QAction* and not QAction
{
QAction *item = new QAction(NULL);
return item;
}item的类型是QAction*,而不是编译器所抱怨的QAction。我想你对空间有点迷惑了。
QAction* item ; // QAction * item ; QAction *item ;以上三个约定的含义都是相同的。
发布于 2011-11-23 22:33:16
如果您需要在堆上创建操作,那么最好将返回值更改为QAction*。
https://stackoverflow.com/questions/8243823
复制相似问题