首页
学习
活动
专区
工具
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

17520

第 19 章 特殊工具与技术

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

71740

第 19 章 特殊工具与技术

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

79650

《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++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

15920

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指针指向被调用成员函数所属对象 喜欢,支持一下新人吧

23340

C++和对象(上)

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

46220

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

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

7410

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

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

11010

C++和对象 (上篇)

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

58300

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

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

20620

C++】初识和对象

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

10910

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

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

39210

和对象初步接触与定义

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

38020

【笔记】《C++Primer》—— 第19章:特殊工具与技术

这一章介绍了平时可能不太会用到C++特性,内容比较杂。其中有类似枚举,联合,局部类这样之前就用过特性,也有成员指针,局部类这样新了解特性。...我们可以先声明一个枚举,然后后面再定义它,但是类似数组声明,我们需要保证声明时整个枚举空间是可确定,也就是我们必须指定限定作用域枚举成员类型 19.4 成员指针 成员指针给了我们一种指向静态成员方法...,因为一般来说我们指针只能指向某个对象成员而非一个抽象上成员,静态成员除外因为静态成员不属于任何一个对象 成员指针让我们可以指向静态成员,但是当我们需要使用成员指针时我们还是需要指定它真正所属对象...直观理解就是当我们用解引用符*对成员指针解引用时,我们得到是对应成员类型,我们还需要对应某个具体对象用点或箭头获取对象这个成员类型真正成员指针可以指向数据成员,自然也可以指向成员函数...,但是生成代码有所差别,C++使用链接指示来指出那些C++函数 使用其他语言函数前要确保有权使用其他语言编译器且与当前C++编译器是互相兼容 链接指示也就是在函数声明前写 extern "

80740

C++和对象(上)

来进行定义 C语言结构体无法定义函数,且默认所有成员为公有 C++中支持定义函数,将其称为成员函数,并且所有成员默认为私有 //C语言 struct C { int add(int x...,而成员函数需要通过对象来调用,这就意味着只要发生了调用成员函数行为,就一定能找到对象对应成员变量 因此C++ 编译器做了这样一件事:给每个静态成员函数增加了一个隐藏参数 this 指针,该指针指向调用成员函数对象...,即使我们不主动通过 this 指针指向成员变量 //编译器也会自动给我们加上 this 指针指向当前对象成员变量 _year; //实际效果等价于 this->_year this->_year...; } 注意: this 指针是被 const 修饰,也就是说 this 指针只能指向当前对象 this 指针只能在成员函数内部使用 this 指针不存储在对象,是通过参数传参形式传递给 成员函数...,最后还知道了 this 指针存在,体验到了和对象巧妙用法;在下一篇文章,我们将会学习各种默认成员函数,看看当初祖师爷在设计时都出现了哪些问题,后续是如何解决问题,以及更为有趣成员函数

10310

C++心决之类和对象详解(上篇)(封装入门篇)

比如: 之前在数据结构初阶,用 C 语言方式实现栈,结构体只能定义变量 ;现在以 C++ 方式实现, 会发现 struct 也可以定义函数 typedef int DataType...内容称为 成员 变量 称为 属性 或 成员变量 ; 函数 称为 方法 或者 成员函数两种定义方式: 1....C++ 通过引入 this 指针解决该问题,即: C++ 编译器给每个 “ 静态成员函数 “ 增加了一个隐藏 指针参数,让该指针指向当前对象 ( 函数运行时调用该函数对象 ) ,在函数体中所有...(即该指针只能指向由该类型实例化出来某一个对象成员变量,不能更改其指向) 2....如果不同过对象调用成员函数,则this指针指向空就不会报错,反之就会报错(因为你基于某个对象调用该类型成员函数,就必须将对象地址传给this指针,确保this指针可以访问到该对象成员变量)

11310

C++初阶-和对象上

C++和对象起点之章 一、前言 二、面向过程/对象区别 三、引入 四、定义 五、访问限定符及封装 1、访问限定符 2、封装 六、作用域 七、实例化 八、对象模型 1、对象大小计算...class为定义关键字,ClassName为名字,{}主体,注意定义结束时后面分号 元素称为成员数据称为属性或者成员变量; 函数称为方法或者成员函数...限定有哪些成员(类型和方法) 定义出只是相当于一种承诺,并不会分配实际内存空间来存储成员 一个可以实例化出多个对象,实例化出对象占用实际物理空间,存储成员变量(对于成员函数会存在于代码段...,由此引入this指针 具体操作: C++编译器给每个“静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有成员变量操作,都是通过该指针去访问...而this指针参数则是存放在寄存器静态成员函数因为没有this指针这个参数,所以静态成员函数也就无法调用静态成员变量 this指针可以为空吗?

45850

C++和对象核心总结

C++我们实现封装其实就是通过和访问限定符,将对象内部实现细节隐藏起来,通过访问限定符将某些接口放开在外部进行使用。...静态成员函数this指针 a....所以C++编译器给每个“静态成员函数”增加了一个隐藏this指针来作为函数形参, 并且规定该参数必须在函数形参最左边位置,这个指针存储就是对象地址,在函数体中所有访问对象成员变量操作都是通过...,情况就不一样了,因为他内置类型里面有指针,此时一旦发生拷贝构造,两个对象指针指向就是同一块空间,那么在在两个对象生命结束时所调用析构函数就会讲相同指针指向空间释放两次,第二次释放地址就是一个无效地址...this指针,因为对象函数调用以及成员变量访问等等,其实都是通过隐形this指针来完成,你现在没有this指针,当然就无法访问这些静态成员了。

66830
领券