当我尝试返回值时,我的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
答案 0 :(得分:2)
我不熟悉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 ;
以上三个约定都是相同的。
答案 1 :(得分:1)
执行return item
时,您将返回指向QAction
的指针,但根据函数的声明,您返回QAction
,因此返回错误。
所以,你应该这样做:
QAction* SmtdPlugin::newItem() {
QAction *item = new QAction(NULL);
return item;
}
答案 2 :(得分:0)
如果您需要在堆上创建操作,那么最好将返回值更改为QAction *。
答案 3 :(得分:0)
在代码中,您返回QAction*
类型的项目:
return item; // here i get error
但您的功能签名要求您返回QAction:
QAction SmtdPlugin::newItem() {
要解决冲突,请将功能签名更改为
QAction* SmtdPlugin::newItem() {
或 改变你的函数的概念,这样它就不会再使指针退出。