当前位置: 移动技术网 > IT编程>开发语言>C/C++ > cannot convert from pointer to base class 'QObject' to pointer to derived class 'subClass' via virtual base 'baseClass'

cannot convert from pointer to base class 'QObject' to pointer to derived class 'subClass' via virtual base 'baseClass'

2019年06月05日  | 移动技术网IT编程  | 我要评论

维纳吉斯性别鉴定计,雨菲儿,智能小车

qt 编译不过的另一个问题:

1. 新建一个console工程

qt -= gui

config += c++11 console
config -= app_bundle

# the following define makes your compiler emit warnings if you use
# any feature of qt which as been marked deprecated (the exact warnings
# depend on your compiler). please consult the documentation of the
# deprecated api in order to know how to port your code away from it.
defines += qt_deprecated_warnings

# you can also make your code fail to compile if you use deprecated apis.
# in order to do so, uncomment the following line.
# you can also select to disable deprecated apis only up to a certain version of qt.
#defines += qt_disable_deprecated_before=0x060000    # disables all the apis deprecated before qt 6.0.0

sources += \
        main.cpp \
    baseclass.cpp \
    subclass.cpp \
    subclass2.cpp
    #grandclass.cpp

# default rules for deployment.
qnx: target.path = /tmp/$${target}/bin
else: unix:!android: target.path = /opt/$${target}/bin
!isempty(target.path): installs += target

headers += \
    baseclass.h \
    subclass.h \
    subclass2.h
    #grandclass.h

2. 添加baseclass

baseclass.h

#ifndef baseclass_h
#define baseclass_h

#include "qobject"

class baseclass: public qobject
{
    q_object

public:
    baseclass(qobject * p = 0);
    virtual ~baseclass() {}

    virtual void vmethod(int) = 0;

signals:
    void signal1();


};

#endif // baseclass_h

baseclass.cpp

#include "baseclass.h"

baseclass::baseclass(qobject * p) : qobject(p)
{

}

3. 添加subclass

subclass.h

#ifndef subclass_h
#define subclass_h

#include "baseclass.h"

class subclass: virtual public baseclass
{
    q_object

public:
    subclass(qobject * p = 0);
    virtual ~subclass() {};
    virtual void vmethod(int) = 0;

signals:
    void signal2();

};

#endif // subclass_h

subclass.cpp

#include "subclass.h"

subclass::subclass(qobject * p) : baseclass (p)
{

}

4. 添加subclass2

subclass2.h

#ifndef subclass2_h
#define subclass2_h

#include "baseclass.h"

class subclass2 : virtual public baseclass
{
    q_object

public:
    subclass2(qobject * p = 0);

    virtual void vmethod(int) = 0;

};

#endif // subclass2_h

subclass2.cpp

#include "subclass2.h"

subclass2::subclass2(qobject * p) : baseclass (p)
{

}

5 main.cpp

#include <qcoreapplication>
#include "subclass.h"
//#include "grandclass.h"

int main(int argc, char *argv[])
{
    qcoreapplication a(argc, argv);


    //grandclass * sub = new grandclass();

    return a.exec();
}

 

编译报错:/build-testqtsignalbug-qt5_9_4_zynq-debug/moc_subclass.cpp:68: error: cannot convert from pointer to base class 'qobject' to pointer to derived class 'subclass' via virtual base 'baseclass'

subclass *_t = static_cast<subclass *>(_o);
^

 

 

解决方法: 将subclass里的signals 删掉, 即不在subclass里声明信号量。

原因:不详。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网