cannot convert from pointer to base class 'QObject' to pointer to derived class 'subClass' via virtual base 'baseClass'
QT 编译不过的另一个问题:
1. 新建一个console工程
QT -= gui CONFIG += c++ 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. 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 = );
virtual ~baseClass() {} virtual void vMethod(int) = ; 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 = );
virtual ~subClass() {};
virtual void vMethod(int) = ; 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) = ; }; #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里声明信号量。
原因:不详。
cannot convert from pointer to base class 'QObject' to pointer to derived class 'subClass' via virtual base 'baseClass'的更多相关文章
- vptr, vtable, virtual base class table
#include <iostream> using namespace std; class X { int x, y, z; }; class Y: public virtual X { ...
- 为什么0x00400000是可执行文件的默认基址?EXE base address start with 400000H,Why is 0x00400000 the default base address for an executable?
DLL的默认基址是0x10000000,但EXE的默认基址是0x00400000.为什么EXE特别值?4 兆字节有什么特别之处它与x86上单页目录条目映射的地址空间量和1987年的设计决策有关.对EX ...
- C#基础知识系列七(base、this、new、override、abstract、virtual、static)
前言 本文主要来讲解一下C#中,自己觉得掌握的不怎么样或者用的不多,不太熟悉的关键字,主要包括base.this.new.override.abstract.virtual以及针对static字段和s ...
- C#基础知识(base、this、new、override、abstract、virtual、static)
前言 本文主要来讲解一下C#中,自己觉得掌握的不怎么样或者用的不多,不太熟悉的关键字,主要包括base.this.new.override.abstract.virtual以及针对static字段和s ...
- base、this、new、override、abstract、virtual、static
前言 本文主要来讲解一下C#中,自己觉得掌握的不怎么样或者用的不多,不太熟悉的关键字,主要包括base.this.new.override.abstract.virtual以及针对static字段和s ...
- virtual base classes
virtual base classes用来实现菱形继承解决多个重复subobject的问题 //: C09:VirtualBase.cpp // Shows a shared subobject v ...
- 剑指offer12:求解double类型的浮点数base和int类型的整数exponent的次方。 保证base和exponent不同时为0
1. 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.保证base和exponent不同时为0. 2. 思路和方法 分析: 由于 ...
- Springboot项目报错【java.base/jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to java.base/java.net.URLClassLoader】
1.发生问题: 升级了JDK9,发现原先的springboot项目起不来了,以为是maven中jdk配置有问题. 于是在pom中添加了 <plugin> <groupId>or ...
- C++话题
1.多态地实现 A:C++中多态的实现原理是怎样的? Q:通过迟邦定技术(late binding)实现. 具体实现原理如下: 1. 基类中函数带virtual关键字,表示该方法为虚函数. 2. 子类 ...
随机推荐
- php重写与重载
转载:https://blog.csdn.net/binghui1990/article/details/9105237 重写/覆盖 override 指:子类重写了父类的同名方法 (注:1.重写 ...
- react-router中,<switch>
有<Switch>标签,则其中的<Route>在路径相同的情况下,只匹配第一个,这个可以避免重复匹配: 无<Switch>标签,则其中的<Route>在 ...
- TTTTTTTTTTTTTTTT POJ 2723 楼层里救朋友 2-SAT+二分
Get Luffy Out Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8211 Accepted: 3162 Des ...
- postman 测试api接口
安装:https://www.getpostman.com/ 谷歌插件安装需要翻墙才能访问,那么直接去官网下载pc端 代码图片: 非常简单 post: 代码图片: 剪头地方,必选
- linux输出与查看的几种方式
输出的几种方式:echo/ tee echo "postgres install Failed !!!!!!" | tee -a "$Install_log"# ...
- Scala学习(四)——模式匹配与函数组合
函数组合 让我们创建两个函数: def f(s: String) = "f(" + s + ")" def g(s: String) = "g(&qu ...
- 怎么理解一个规模大且结构复杂的c工程源码
很久以前,当要着手一个规模很大,结构复杂的c工程源码时,总是感觉无从下手.这个时候,一般google一下”XX源码分析“.当这个源码是很广泛使用的时,这样到也能得到不少启发:很不幸,经常要接触一些很少 ...
- 乌班图docker版本18.04升级到19.03
# 关闭docker sudo systemctl stop docker # 卸载旧版本: sudo apt-get purge docker-ce # 安装新版本 sudo apt update ...
- DPM(物体检测)
1.DPM(物体检测流程) 1.计算DPM特征图 2.计算响应图 3.使用SVM对响应图进行分类 4.对最后的选框做局部检测识别 DPM的梯度提取方向,将图片中的四个区域进行区分,将有符号梯度方向从0 ...
- 【转】JS正则验证邮手机、箱等格式
function test() { var temp = document.getElementById("text1"); //对电子邮件的验证 var myreg = /^([ ...