【发布时间】:2016-12-27 15:49:42
【问题描述】:
我正试图围绕指向成员函数的指针转转,并坚持使用这个示例:
#include <iostream>
class TestClass {
public:
void TestMethod(int, int) const;
};
void TestClass::TestMethod(int x, int y) const {
std::cout << x << " + " << y << " = " << x + y << std::endl;
}
int main() {
void (TestClass::*func)(int, int) const;
func = TestClass::TestMethod;
TestClass tc;
tc.func(10, 20);
return 0;
}
我认为代码应该做什么:
- 在 main 的第一行我声明了一个指向
class TestClass的成员函数的指针,它什么都不返回/接受两个int并声明为const,称为 func。 - 第二行将成员函数
TestMethod(属于TestClass类)分配给满足这些条件的func。 - 第四行创建了一个名为tc的
TestClass-object。 - 第五行尝试在
TestClass-objecttc上调用func指向的成员函数。
我得到两个编译错误:
-
而不是将
TestClass::TestMethod分配给func。编译器尝试调用TestClass::TestMethod(即使它不是static,因此会抛出错误):testPointerToMemberFunc.cpp:14:21: error: call to non-static member function without an object argument func = TestClass::TestMethod; ~~~~~~~~~~~^~~~~~~~~~ -
编译器尝试在
tc上调用名为func的函数,而不是func指向的函数。对我来说,这似乎就像func没有以正确的方式声明(作为指向成员函数的指针):testPointerToMemberFunc.cpp:17:6: error: no member named 'func' in 'TestClass' tc.func(10, 20); ~~ ^
我做错了什么?
【问题讨论】:
标签: c++ class pointers member-function-pointers member-functions