megorit Asked:2020-07-29 14:38:11 +0000 UTC2020-07-29 14:38:11 +0000 UTC 2020-07-29 14:38:11 +0000 UTC 为什么连接信号槽时必须写&Class::Slot? 772 当然,一般来说,使用&符号更明显的是指向函数的指针。但!毕竟,根本没有必要。据我记得在C中: function == &function (*ptr2func)() == ptr2func() 那么为什么在将信号连接到插槽(不带 &)时会显示错误? 错误:必须调用对非静态成员函数的引用 c++ 1 个回答 Voted Best Answer Croessmah stands with Russia 2020-07-29T15:13:18Z2020-07-29T15:13:18Z C++ 规则允许将函数转换(包括隐式)到函数指针,但是,不允许将非静态成员函数转换为指向成员函数的指针。 因此,要获取非静态成员函数的地址,您必须使用一元运算符显式“查询”该地址&。 另请注意,运算符& 需要非静态成员函数的限定名称。例子: struct some { void foo(); void bar() { &foo;//ошибка - foo не квалифицированный идентификатор (unqualified-id) &some::foo;//ок - some::foo - квалифицированный идентификатор (qualified-id) } };
C++ 规则允许将函数转换(包括隐式)到函数指针,但是,不允许将非静态成员函数转换为指向成员函数的指针。
因此,要获取非静态成员函数的地址,您必须使用一元运算符显式“查询”该地址
&。另请注意,运算符
&需要非静态成员函数的限定名称。例子: