//对于&Teacher::hungry,它返回的是如下两种可能,所以就会产生函数地址二义性。就会出错,treat同理
//eg: void Teacher:: (*p)() =&Teacher::hungry 或者void Teacher:: (*p)(QSting) =&Teacher::hungry`
connect(th,&Teacher::hungry,st,&Student::treat);
所以这样就会出错,简单道理讲解:
# include<iostream>
using namespace std;
# include<string>
void test() {
cout << "第一" << endl;
}
void test(int a) {
cout << "第二" <<a<< endl;
}
int main() {
//所以当test函数发生重载时,&test有两种返回类型,但是不知道应该返回哪个,所以就会出现二义性
void(*p)() = &test;
//void(*p)(int) = &test;
//其中p是函数名,而p()相当于test()语句,就是函数调用
p();
system("pause");
return 0;
}
输出结果为:第一
所以应该如下:
void (Teacher::*teachersignal2)(QString) =&Teacher::hungry;
void (Student::*studentslot2)(QString) =&Student::treat;
connect(th,teachersignal2,st,studentslot2);
参考视频讲解:https://www.bilibili.com/video/BV1Nb411K7bW?p=12&spm_id_from=pageDriver&vd_source=26e80390f500a7ceea611e29c7bcea38