• 11264阅读
  • 14回复

这句有什么问题么,编译报错 [复制链接]

上一主题 下一主题
离线dosmlp
 

只看楼主 倒序阅读 楼主  发表于: 2014-12-23
  1. connect(MplayerProcess,&QProcess::finished,&PlayerMain::ReadConfig);


ReadConfig是PlayerMain的一个成员函数,this即PlayerMain

error:“QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”: 无法将参数 2 从“overloaded-function”转换为“const char *”
上下文不允许消除重载函数的歧义


补充:
     pro已添加CONFIG += c++11
     Qt5.3.2+msvc2013

  1. connect(MplayerProcess,&QProcess::finished,this,&PlayerMain::ReadConfig);

同样报错:“QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”: 无法将参数 2 从“overloaded-function”转换为“const char *”
上下文不允许消除重载函数的歧义


  1. connect(Server,&QTcpServer::newConnection,
  2.             [=]{
  3.                     ServerSocket = Server->nextPendingConnection();
  4.                     ui->info->insertPlainText(ServerSocket->peerAddress().toString()+"-connected\n");
  5.             });
上面段代码就没报错,而且可以实现

  1. connect(MplayerProcess,&QProcess::finished,
  2.             [=]{
  3.         qDebug()<<"slot";
  4.     });


上面这段代码报错

“QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”: 无法将参数 2 从“overloaded-function”转换为“const char *”
        上下文不允许消除重载函数的歧义

  1. connect(MplayerProcess,SIGNAL(finished(int)),this,SLOT(StartPlayer()));

上面这段代码没有报错(StartPlayer申明为槽函数
离线圣域天子

只看该作者 1楼 发表于: 2014-12-23
看上去好象是少了个参数~~~
离线箭头向下

只看该作者 2楼 发表于: 2014-12-23
在pro文件添加 config+=C++11
离线dosmlp

只看该作者 3楼 发表于: 2014-12-23
回 圣域天子 的帖子
圣域天子:看上去好象是少了个参数~~~ (2014-12-23 10:01) 

是加个this参数吗?加了也报一样的错
离线dosmlp

只看该作者 4楼 发表于: 2014-12-23
回 箭头向下 的帖子
箭头向下:在pro文件添加 config+=C++11 (2014-12-23 10:26) 

嗯,有加的
离线dbzhang800

只看该作者 5楼 发表于: 2014-12-23
你不妨回答:你调用(或准备调用) 的是下面的哪一个?

QMetaObject::Connection    connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection    connect(const QObject * sender, const QMetaMethod & signal, const QObject * receiver, const QMetaMethod & method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection    connect(const QObject * sender, PointerToMemberFunction signal, const QObject * receiver, PointerToMemberFunction method, Qt::ConnectionType type)
QMetaObject::Connection    connect(const QObject * sender, PointerToMemberFunction signal, Functor functor)
QMetaObject::Connection    connect(const QObject * sender, PointerToMemberFunction signal, const QObject * context, Functor functor, Qt::ConnectionType type)
离线dbzhang800

只看该作者 6楼 发表于: 2014-12-23
回 dosmlp 的帖子

你没有正面回答我的问题。不过

源码你都贴出来了,你也应该知道问题出在哪儿了吧?



离线dosmlp

只看该作者 7楼 发表于: 2014-12-23
回 dbzhang800 的帖子
dbzhang800:你没有正面回答我的问题。不过
源码你都贴出来了,你也应该知道问题出在哪儿了吧?
....... (2014-12-23 12:58) 

不太懂,但我看http://blog.qt.digia.com/cn/2012/08/07/new-signals-slots-syntax-in-qt5/
上面就这样写的啊
离线roywillow

只看该作者 8楼 发表于: 2014-12-23
connect(MplayerProcess,&QProcess::finished,&PlayerMain::ReadConfig);
                        ↑                                    ↑                                    ↑
                   sender                         signal                              slot?
你receiver呢?
所以还是张大大的那个问题,你打算调用哪个connect的重载……?
下面的代码没问题,是因为你调用的是QMetaObject::Connection connect(const QObject * sender, PointerToMemberFunction signal, Functor functor)这个重载啊(sender、signal、functor)
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dosmlp

只看该作者 9楼 发表于: 2014-12-23
回 roywillow 的帖子
roywillow:connect(MplayerProcess,&QProcess::finished,&PlayerMain::ReadConfig);
                        ↑      & .. (2014-12-23 21:07) 

可是我加了第三个参数this,也报同样的错误啊,我看官方博客中写的可以不用写接收对象,可以调用任意函数的
离线dbzhang800

只看该作者 10楼 发表于: 2014-12-23
回 dosmlp 的帖子
dosmlp:可是我加了第三个参数this,也报同样的错误啊,我看官方博客中写的可以不用写接收对象,可以调用任意函数的 (2014-12-23 21:59) 

建议:先搞清楚你 调用(或准备调用) 的是 connect 的哪个重载形式。 (你给的blog中没有你这儿用的这种写法。)

另外:你只是告诉大家加this也没用,这个信息对其他人也没有用。因为你既没有给出加上this后的出错信息,也没有告诉大家你的this对象是不是PlayerMain对象。
离线roywillow

只看该作者 11楼 发表于: 2014-12-23
回 dosmlp 的帖子
dosmlp:可是我加了第三个参数this,也报同样的错误啊,我看官方博客中写的可以不用写接收对象,可以调用任意函数的 (2014-12-23 21:59) 

谁说第三个参数一定是this了啊……
第三个是receiver啊
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dosmlp

只看该作者 12楼 发表于: 2014-12-24
回 dbzhang800 的帖子
dbzhang800:建议:先搞清楚你 调用(或准备调用) 的是 connect 的哪个重载形式。 (你给的blog中没有你这儿用的这种写法。)
另外:你只是告诉大家加this也没用,这个信息对其他人也没有用。因为你既没有给出加上this后的出错信息,也没有告诉大家你的this对象是不是PlayerMain对象。  (2014-12-23 22:28) 

帖子内容已更新,this即PlayerMain,加this 报错信息一样
离线dosmlp

只看该作者 13楼 发表于: 2014-12-24
回 roywillow 的帖子
roywillow:谁说第三个参数一定是this了啊……
第三个是receiver啊 (2014-12-23 23:14) 

帖子内容已更新,我这里的receiver应该就是this
离线dbzhang800

只看该作者 14楼 发表于: 2014-12-24
回 dosmlp 的帖子
dosmlp:帖子内容已更新,this即PlayerMain,加this 报错信息一样 (2014-12-24 09:26) 

这么说吧,我其实知道你想做什么,我甚至知道你这么使用信号槽的新语法来连接 QProcess::finished 看到的具体的出错信息是什么。

但是,你说你加 this 以后出现信息和你开始贴出的一样。 我就没办法了。
快速回复
限100 字节
 
上一个 下一个