函数指针 - 编译时错误
Function Pointer - Compile time error
我是函数指针的新手,我希望得到你的帮助。我有一个方法:
int test3(int i)
{
return i;
}
然后在另一种方法(不是主要方法)中,我这样做:
int (*pTest3)(int) = test3;
从我读过的例子来看,这似乎还可以。但是,我收到编译时错误:
testFile.cpp:277:25:错误:类型为'int'的参数 ({anonymous}::CheckingConsumer::)(int)' 不匹配 'int (*)(int)'
我不明白出了什么问题。任何帮助将不胜感激。
多谢。
您的test3
是struct
或class
的成员函数。 类成员函数具有传入的隐藏this
参数,因此不能与普通函数指针一起使用。 您需要将函数声明为 static
或将其移动到 struct
/class
之外,以便它不再具有隐藏的 this
参数,或者使用类方法指针而不是函数指针:
// static class method:
class X
{
static int test3(int i)
{
...
}
};
// Non-class method, at global scope
int test3(int i)
{
...
}
// Class method pointer
class X
{
int test3(int i)
{
...
}
};
// Create the method pointer
int (X::*pTest3) = &X::test3;
X *obj;
// Call the method pointer on an object
(obj ->* pTest3)(42);
您的方法test3
似乎是一个实例方法。稍后,您将pTest3
定义为函数指针,而不是成员函数指针。
之间的主要区别在于,使用成员指针需要对象的实例。对象的实例告诉应该处理哪个对象,指针的值告诉应该使用对象的哪个数据字段或应该调用哪个成员函数。成员指针的值在概念上等效于从对象开头到其成员的偏移量。
使用 typedef 声明成员指针:
typedef int (SomeClass::*MyMethodPtr)(int i);
MyMethodPtr ptr3 = SomeClass::test3;
现在使用此指针:
class SomeClass *pab = &ab;
int ret_value = (pab->*ptr3)(4);
请注意,使用该类的实例。关于成员指针还有其他重要点。它们被实现为结构,其中包含 2 到 5 个简单的指针和偏移量,具体取决于编译器和其他方面,如多重继承、虚拟基类的存在等。
相关文章:
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 如何在常量计算表达式中获取编译时错误?
- C++根据调用的构造函数强制编译时错误
- 使用 std::iterator_traits<> 时编译时错误不明确
- is_same和variadic模板编译时错误无效转换
- 私有运营商删除会触发 GCC 和 Clang 的编译时错误,但不会在 MSVC 上触发编译时错误
- 运行时与编译时多态性:更好的可读性与编译时错误检查,更重要的是
- 引发编译时错误
- 为什么调用不明确的 ctor 时没有编译时错误?
- 在 sizeof 运算符上强制编译时错误
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 从Mac上的终端编译时C 错误
- 使用MINGW-W64使用-M32选项(32位代码)编译时错误
- C++线程错误 - 带有类参数的编译时错误
- 尝试调用指向成员函数的函数指针时出现编译时错误
- 取消引用地图指针时出现编译时错误
- 函数指针 - 编译时错误
- 如果将数组名称视为指针,为什么在递增数组时会出现Lvalue所需的编译时错误
- 2个c源文件之间的函数指针操作导致编译时错误
- 在工厂中使用指针函数会产生编译时错误