首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++:‘之前应为非限定id '(’token‘指向类中成员函数的指针

C++:‘之前应为非限定id '(’token‘指向类中成员函数的指针

这个问题涉及到C++中的函数指针和成员函数指针的概念。

在C++中,函数指针是指向函数的指针变量,可以用来调用函数。而成员函数指针是指向类的成员函数的指针变量,可以用来调用类的成员函数。

在给出完善且全面的答案之前,我先解释一下这个问题的背景和相关概念。

在C++中,成员函数指针的语法比较特殊。如果要声明一个指向类的成员函数的指针,需要使用类名作为前缀,并在成员函数名后面加上括号和参数列表。例如,如果有一个类名为MyClass,其中有一个成员函数名为myFunction,那么声明一个指向该成员函数的指针的语法如下:

代码语言:txt
复制
返回类型 (MyClass::*指针变量名)(参数列表)

其中,返回类型是成员函数的返回类型,参数列表是成员函数的参数列表。MyClass::*表示这是一个指向MyClass类的成员函数的指针。

现在回到问题本身,问题中提到的语法错误是因为在C++中,如果使用成员函数指针调用成员函数,需要使用对象或对象指针来调用,而不能直接使用指针变量。正确的语法应该是:

代码语言:txt
复制
MyClass obj;
(MyClass::*ptr)(参数列表) = &MyClass::myFunction;
(obj.*ptr)(参数列表);

这里,我们首先创建了一个MyClass的对象obj,然后声明了一个指向MyClass类的成员函数myFunction的指针ptr,并将其初始化为指向myFunction的地址。最后,通过obj.*ptr的方式调用了myFunction。

至于这个问题的分类,它属于C++语法中的指针和成员函数指针的概念。

关于C++中的函数指针和成员函数指针,可以参考腾讯云的C++开发文档,链接地址:https://cloud.tencent.com/document/product/248/486

腾讯云还提供了C++开发工具包和云服务器等相关产品,可以帮助开发者在云计算环境中进行C++开发和部署。具体产品信息可以参考腾讯云的官方网站:https://cloud.tencent.com/product/cpp

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++C++ this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

一、常量成员函数 1、const 修饰成员函数分析 在 C++ , 普通静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student , 定义了 void fun(int...void fun(int age, int height) const const 修饰是 fun 函数 第一个参数 Student* pThis 指针指向内存空间 ; C++ 编译器会将 void...函数 第一个参数 Student* pThis 指针指向内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int age...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数 不能修改 对象 任何成员变量 ; class Student { public: void fun.../ // const 修饰是 fun 函数 第一个参数 Student* pThis 指针指向内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student

22020

第 19 章 特殊工具与技术

{ return &Screen::contens; } // 其他成员之前版本一致 }; 同样也可以定义指向成员函数指针,最简单方法是使用 auto来推断类型。...对于其他语言编写函数来说,编译器生成代码会有所不同,C++使用链接指示指出任意 C++函数使用语言。 链接指示可以有两种形式:单个或符合。...指向 C函数指针指向 C++函数指针是不一样类型。...因为链接指示同时作用于声明语句中所有函数,所以如果我们希望给 C++函数传入一个指向 C函数指针,则必须使用类型别名。...void FC(int); // f2是一个 C++函数,该函数形参是指向 C函数指针 void f2(FC *); 通过使用链接指示对函数进行定义,我们可以令一个 C++函数在其他语言编写程序可用

82850
  • 第 19 章 特殊工具与技术

    { return &Screen::contens; } // 其他成员之前版本一致 }; 同样也可以定义指向成员函数指针,最简单方法是使用 auto来推断类型。...对于其他语言编写函数来说,编译器生成代码会有所不同,C++使用链接指示指出任意 C++函数使用语言。 链接指示可以有两种形式:单个或符合。...指向 C函数指针指向 C++函数指针是不一样类型。...因为链接指示同时作用于声明语句中所有函数,所以如果我们希望给 C++函数传入一个指向 C函数指针,则必须使用类型别名。...void FC(int); // f2是一个 C++函数,该函数形参是指向 C函数指针 void f2(FC *); 通过使用链接指示对函数进行定义,我们可以令一个 C++函数在其他语言编写程序可用

    74740

    《C++Primer》第十九章

    枚举类型 C++包含两种枚举:限定作用域和不限定作用域C++新标准引入了限定作用域枚举类型。...成员指针是指可以指向静态成员指针。...&Screen::get_cursor; 指向成员函数指针也需要指定目标函数返回类型和形参列表 如果成员函数是const成员或引用成员,我们必须将const限定符或者引用限定符包含进来 如果成员存在重载问题...3.1 声明一个C++函数 // cstring头文件C函数声明 // 单语句链接指示 extern "C" size_t strlen(const char *); // 复合语句链接指示 extern...3.3 指向extern "C"函数指针 // pf指向一个C函数, 该函数接受一个int返回void extern "C" void (*pf)(int); 指向C函数指针指向C++函数指针是不一样类型

    1.3K10

    C++学习————第四天(、this指针

    声明放在.h文件成员函数定义放在.cpp文件,注意:成员函数名前需要加名 :: 域 一般情况下 都会在变量一般都是加个前缀或者后缀标识区分就行 比如: 4.访问限定符及封装...编译器通过下面 注释部分去完成操作 C++通过引入this指针解决该问题,即:C++编译器给每个“静态成员函数“增加了一个隐藏 指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有...只能在“成员函数内部使用 3. this指针本质上是“静态成员函数形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象不存储this指针。...例如: \ 3、返回指向对象指针成员函数,如果想要返回指向对象指针,就可以使用this指针。...2.this关键字只能用于成员函数,不能用于被static修饰函数(静态函数),因为静态成员函数没有this指针,它们仅能访问静态数据成员和静态成员函数 3.在C++,this关键字是一个指向对象自己一个指针

    8710

    C++C++ this 指针用法 ③ ( 全局函数成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

    一、全局函数成员函数 相互转化 1、成员函数转为全局函数 - 多了一个参数 C++ 编译器 , 在编译阶段会将 C++ 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数到参数列表开始为止..., 这个增加参数是 对象本身指针 ; 在 Student , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void..., 就是通过 this 指针隐藏左操作数 , 对象本身 就是 左操作数 , 在成员函数 , 通过 this 指针访问对象本身成员 ; 在全局函数 , 实现两个 Student 相加 , 接收两个...// this 是指针 , *this 是指针指向 自身对象 return *this; } 返回 引用 , 就是返回自身对象 ; this 是指针 , *this 是指针指向 自身对象...this->height + s2.height; // 注意 : 返回是一个引用 , 就是返回自身对象变量 // this 是指针 , *this 是指针指向 自身对象 return

    22420

    C++学习知识点

    C++,实现多态有以下方法:虚函数,抽象,重载,覆盖,模板。 2.特征 答:封装、继承和多态。 3. C++与C#区别 (1)C++申明时,不能给数据成员赋值,通常使用构造函数来完成。...(5)C++中有指针类型,而C#没有指针类型,C#delegate类型本质上就是C++函数指针,通俗来说就是类型化了函数指针,用于函数回调。 4....C++接口就是成员函数。实现多态性,通过指向派生指针,访问派生同名重定义成员函数。 9....深拷贝存在情况就是在成员中有基本数据类型变量时,比如指针,数组或者引用。...(2)对于成员函数时,若运算符为单目的,则无参数;若运算符为双目的,则有一个参数, 第一个操作数应为成员函数所属类型。

    1.7K20

    this指针用法及其深究

    这个么,空口无凭,我现在来举一个例子: 我们知道对于一个来说,要有很多工作要做,其中成员函数可以访问数据(限定符只是限定一些操作,一切对于成员函数来说都是透明),那么成员函数如何知道哪个对象数据成员要被操作呢...,这时c++this指针就应用而生了 注: 每个对象都拥有一个指针:this指针,通过this指针来访问自己地址。...} int main() { text01(); text02(); return 0; } 主要用途 当形参和成员变量同名时,可用this指针来区分 在静态成员函数返回对象本身...,可使用return *this 总结 通过上面我们知道在C++成员变量和成员函数是分开存储 每一个静态成员函数只会诞生一份函数实例,也就是说多个同类型对象会共用一块代码 c++通过提供特殊对象指针...this指针指向被调用成员函数所属对象 this指针是隐含每一个静态成员函数一种指针 this指针不需要定义,直接使用即可 最后:this指针指向被调用成员函数所属对象 喜欢,支持一下新人吧

    26340

    C++和对象(上)

    在开始具体之前我们先来看看访问限定 C++实现封装方式:用将对象属性与方法结合在一块,让对象更加完善,通过访问权限选择性将其接口提供给外部用户使用 访问限定符说明 public...注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上区别 C++struct和class区别是什么❓ C++需要兼容C语言,所以C++struct可以当成结构体去使用。...C++通过引入this指针解决该问题,即:C++编译器给每个“静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有成员变量操作,都是通过该指针去访问...** this指针成员函数第一个隐含指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递 const Date*p1;//const修饰指针指向对象....为什么❓成员函数不存在对象里,存在于常量区(代码段),编译器调用函数时P不会到p指向对象里找Print()地址. 不发生解引用,因为成员函数地址不在对象,在公共代码区域。

    49520

    C++进阶之路:探索访问限定符、封装与this指针奥秘(与对象_上篇)

    C++ 中有三种访问限定符: public(公有): 成员内部和外部都可以被访问。 protected(保护): 成员内部和派生(子类)可以被访问,但不能在外部直接访问。...例如,Pa是一个指向A对象指针,则在表达式Pa->M,M具有A作用域。 在使用作用域运算符所限定成员。例如,在表达式A::M,M具有A作用域。...在C++,当你有一个(比如Date)并且这个成员函数(比如Init和Print),编译器确实为每个静态成员函数增加了一个隐藏指针参数this。...在C++,编译器为每个静态成员函数隐式地传递一个名为this指针,该指针指向调用该函数对象。 这使得成员函数能够知道它们应该操作哪个对象数据成员。这个过程对用户是透明。...在 C++ ,当你有一个指向对象指针,并试图通过该指针调用成员函数时,编译器会生成代码来隐式地传递一个指向该对象 this 指针成员函数

    13310

    C++初阶与对象(一):学习与对象、访问限定符、封装、this指针

    比如:之前在数据结构初阶,用C语言方式实现栈,结构体只能定义变量;现在以C++方式实现,会发现struct也可以定义函数 之前c: struct Stack { int* a; int...内容称为成员变量称为属性或成员变量 ; 函数称为方法或者成员函数。...Init 与 Print 两个成员函数函数没有关于不同对象区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象 C++通过引入this指针解决该问题,...即:C++编译器给每个“静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有“成员变量”操作,都是通过该指针去访问。...* 只能在“成员函数内部使用 this指针本质上是“成员函数形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象不存储this指针

    14010

    和对象(1)

    引入 c++结构体不仅可以定义变量,还能定义函数,而在c语言中结构体只能定义变量。现在以c++方式实现,发现struct也可以定义函数。...定义 class ClassName { //由成员函数成员变量组成 }; 内容称为成员变量称为属性或成员变量,函数称为方法或成员函数。...c++通过引入this指针来解决这个问题: c++给每个静态函数一个this指针,通过指向当前对象(函数运行时调用对象),所有成员变量操作,都是通过指针去访问。...->_day = day; } 特性 1 类型*const,不能给this指针赋值(const*修饰指向对象,*const修饰指针本身) 2 本质上是成员函数形参,当对象调用成员函数时,...c++ c++通过,可以将数据以及操作数据方法完美结合,通过访问权限可以控制那些方法在函数可以被调用,即封装。C++ Stack *是编译器自己维护,而c语言中是需要用户进行维护

    6810

    C++】继承 ⑥ ( 继承构造函数和析构函数 | 类型兼容性原则 | 父指针 指向 子类对象 | 使用 子类对象 为 父对象 进行初始化 )

    地方 , 都可以使用 " 公有继承 " 派生 ( 子类 ) 对象 替代 , 该 派生 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外 所有 成员变量 和 成员方法 ; 功能完整性 :..." 私有继承 " 派生 , 是 不具有 基 完整功能 , 因为 最终继承 后派生 , 无法在 外部调用 父 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则...指向 子类对象 定义 一个子类对象 Child child ; 定义父指针 , 将 指针 指向 子类对象 地址 , 这是合法 ; 代码示例 : // 父对象 Parent parent...// 子类对象 可以调用 父公有函数 child.funParent(); // 将指向子类对象指针传给接收父指针函数 // 也是可以 fun_pointer...// 通过父指针调用父函数 p_parent->funParent(); // 将指向子类对象指针传给接收父指针函数 // 也是可以 fun_pointer

    28420

    C++和对象 (上篇)

    内容称为成员变量称为属性或成员变量;函数称为方法或者成员函数定义方式 C++一共有两种定义方式: 1、声明和定义全部放在 (注意:成员函数如果在定义...,编译器可能会将其当成内联函数处理) : 2、声明放在.h文件成员函数定义放在.cpp文件 (注意:成员函数名前需要使用名+域限定符): 定义两个惯例 1、成员变量使用修饰符修饰...,它会到整个中去寻找,然后再到全局去寻找;所以在C++,我们是可以将成员变量定义成员函数后面的; 上面解释了成员函数定义在成员变量之前可行性,下面我借用 《高质量C/C++编程》解释来阐述为什么要将成员函数定义在成员变量前面...实际上,C++通过引入this指针解决该问题,即:C++编译器给每个 “静态成员函数“ 增加了一个隐藏指针参数,让该指针指向当前对象 (函数运行时调用该函数对象),在函数体中所有“成员变量”操作...,但可以修改其指向对象 (我们可以通过 this 指针修改成员变量值,但不能让 this 指向其他对象) this 指针本质上是“成员函数一个形参,当对象调用成员函数时,将对象地址作为实参传递给

    60800

    C++】初识和对象

    引入 C语言结构体只能定义变量,在C++,结构体内不仅可以定义变量,也可以定义函数。...比如: 之前在数据结构初阶,用C语言方式实现栈,结构体只能定义变量;现在以C++方式实现,会发现struct也可以定义函数。...C++通过引入this指针解决该问题,即:C++编译器给每个“静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有“成员变量”操作,都是通过该指针去访问...只不过所有的操作对用户是透明,即用户不需要来传递,编译器自动完成。 9.2 this指针特性 this指针类型:类型* const,即成员函数,不能给this指针赋值。...只能在“成员函数内部使用 this指针本质上是“成员函数形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象不存储this指针

    13910

    C++从小白到大牛】和对象

    比如:之前在数据结构初阶,用C语言方式实现栈,结构体只能定义变量;现在以C++方式实现,会发现struct也可以定义函数。...四、访问限定符 访问限定C++实现封装方式:用将对象属性与方法结合在一块,让对象更加完善,通过访问权限选择性将其接口提供给外部用户使用 【访问限定符说明】 public修饰成员外可以直接被访问...C++通过引入this指针解决该问题,即:C++编译器给每个“静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有“成员变量”操作,都是通过该指针去访问...静态成员即可用 名::静态成员 或者 对象.静态成员 来访问 4. 静态成员函数没有隐藏this指针,不能访问任何静态成员 5....问题: 1、静态成员函数能调用静态成员函数吗? 答:不可以,因为静态成员函数没有this指针,同样也不能访问静态成员变量 2、静态成员函数能调用静态成员函数吗?

    7810

    C++打怪升级(四)- 和对象入门1

    C++结构体struct为了和C语言中结构体struct兼容,在没有访问限定符时,默认是成员变量和成员函数公共。...C++class则没有这个包袱,在没有访问限定符时成员变量和成员函数是私有的。...成员函数成员变量定义和声明先后位置是没有要求,这是因为是一个作用域,在成员变量和成员函数是一个有机整体,当需要使用某个变量或函数时,会在中所有地方寻找,而不是在使用地方之前寻找...C++引入了this指针解决了这个问题:C++编译器给每个“静态成员函数“增加了一个隐藏 指针参数this,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有对成员变量 操作...C++引入了this指针解决了这个问题:C++编译器给每个“静态成员函数“增加了一个隐藏 指针参数this,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有对成员 变量操作

    47710

    C++初阶——和对象

    呀哈喽,我是结衣 C++入门之后,我们就进入了C++初阶学习了,在了解和对象之前,我们还是先了解,面向过程和面向对象初步认识。...比如:之前在数据结构初阶,用C语言方式实现栈,结构体只能定义变量;现在以C++方式实现,会发现struct也可以定义函数。...内容称为成员变量称为属性或成员变量; 函数称为方法或者成员函数。 下面我们来讲解,两种定义方式。...C++通过引入this指针解决该问题,即:C++编译器给每个“静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有“成员变量”操作,都是通过该指针去访问...只能在“成员函数内部使用 this指针本质上是“成员函数形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象不存储this指针

    7810

    C++初阶】—— 和对象 (上)

    初步认识C++ 1. 我们知道之前学习C语言是面向过程,关注是过程,分析出求解问题步骤,通过函数调用逐步解决问题。 2....为名字,{}主体,注意定义结束时后面分号不能省略 内容称为成员变量称为属性或成员变量; 函数称为方法或者成员函数 两种定义方式: 声明和定义全部放在...,那么C++多了个函数该怎么计算呢,我们先来看看结果 初步结论: 成员函数不算在大小 大小遵守结构体内存对齐规则 对象存储方式 好家伙,两个结果居然是一样,这到底是什么情况...C++编译器给每个“静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(调用该函数对象),在函数体中所有“成员变量”操作,都是通过该指针去访问 this指针特性 this指针特性...: this指针类型:类型* const,即成员函数,不能给this指针赋值。

    6710

    和对象初步接触与定义

    比如:         之前在数据结构,用C语言方式实现栈,结构体只能定义变量;现在以C++方式实现,会发现struct也可以定义函数 typedef int DataType; struct...C++作为C优化当然也考虑了上文所提及不安全行为情况,这里提供了成员函数,就可以直接将该类相关函数直接内嵌在该类定义,此时就可以直接用成员函数来访问或修改成员函数,如果我们将成员变量在加一个限定只能成员函数才能访问...C++通过引入this指针解决该问题,即:C++编译器给每个“静态成员函数“增加了一个隐藏 指针参数,让该指针(this*)指向当前对象(函数运行时调用该函数this*对象),在函数体中所有...8.2 this指针特性 1. this指针类型:”“类型* const,即成员函数,不能给this指针赋值。 2....首先由于两者定义这个新变量时,定义指针指向为空指针(这是一种没事找事写法,这里写目的仅仅是想提升大家对于this理解),我们都知道空指针是不能解引用,看到这里可能有同学可能会恍然一悟

    41220

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券