C++ display函数报错:非标准语法及成员函数非法操作求助
解决你遇到的C++类成员语法错误
我来一步步帮你拆解这两个错误的根源,以及对应的解决办法:
第一个错误:Non-standard syntax; use '&' to create a pointer member
这个错误大概率是你混淆了类的成员变量和成员函数的声明/使用语法。举个常见的错误场景:
- 如果你在类里想声明存储数据的float成员变量,却误写成了类似函数的形式;
- 或者你把成员函数当成普通变量去赋值(比如试图把计算出的float值直接赋值给
display函数)。
比如错误代码片段可能是这样:
class Rectangle { // 错误:想声明成员变量却加了函数名前缀 void display float area; }; // 或者调用时的错误: Rectangle rect; rect.display = 10.5f; // display是函数,不能直接赋值
第二个错误:'&': illegal operation on bound member function expression
当你错误地给已经绑定到对象的成员函数加&取地址时,就会触发这个错误。比如你可能写成了:
Rectangle rect; // 错误:rect.display是绑定了具体对象的函数,不能直接这么取地址 void (*funcPtr)() = &rect.display;
正确取成员函数地址的方式应该是针对类本身,而非实例化后的对象。
符合需求的正确代码示例
假设你的需求是:类中存储float类型的数据,用display函数来展示这些数据(比如计算面积后输出),那正确的代码应该是这样:
#include <iostream> #include <string> // 注意:<conio.h>是非标准头文件,建议尽量避免使用 using namespace std; class Shape { private: // 存储float类型数据的成员变量 float width; float height; public: // 构造函数:初始化成员变量 Shape(float w, float h) : width(w), height(h) {} // display成员函数:负责展示数据/计算结果 void display() { float area = width * height; cout << "计算得到的面积是:" << area << endl; } }; int main() { Shape square(4.2f, 4.2f); // 调用成员函数必须加括号() square.display(); return 0; }
关键知识点梳理
- 类的成员变量用来存储数据(比如你的float值),声明只需要
类型 + 变量名,不需要函数括号; - 类的成员函数用来操作数据,声明必须写
返回类型 + 函数名(参数列表),调用时必须加()(哪怕无参数); - 如果需要取成员函数的地址,正确语法是
&类名::成员函数名,比如void (Shape::*funcPtr)() = &Shape::display;。
如果你的实际代码和我假设的场景不同,可以把完整的类代码贴出来,我再帮你精准定位问题~
内容的提问来源于stack exchange,提问作者E.Mules
相关产品推荐
相关产品推荐

