让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
这个错误是因为使用了非标准的成员函数指针语法。在调用成员函数指针时,应该使用"&类名::成员函数名"来表示指向成员函数的指针。
修改后的代码如下:
class Stack {
public:
Stack(int size);
~Stack();
bool stackEmpty() const; // 修改成员函数声明
bool stackFull() const; // 修改成员函数声明
private:
int* base;
int* top;
int size;
};
Stack::Stack(int size) {
base = new int[size];
std::cout << "构造 " << std::endl;
this->size = size;
top = base;
}
Stack::~Stack() {
delete[] base;
size = 0;
base = top = NULL;
std::cout << "析构" << std::endl;
}
bool Stack::stackEmpty() const { // 修改成员函数实现
if (top == base) {
return true;
}
return false;
}
bool Stack::stackFull() const { // 修改成员函数实现
if (top - base == size) {
return true;
}
return false;
}
其中,修改成员函数时,在成员函数名后加了const关键字,表示这个函数不会修改类的成员变量。同时,在调用成员函数指针时,应该使用"&类名::成员函数名"来表示指向成员函数的指针。 示例代码:
Stack s(10);
bool (Stack::*empty)(void) const = &Stack::stackEmpty;
bool (Stack::*full)(void) const = &Stack::stackFull;
if ((s.*empty)()) {
std::cout << "栈为空" << std::endl;
} else {
std::cout << "栈不为空" << std::endl;
}
if ((s.*full)()) {
std::cout << "栈已满" << std::endl;
} else {
std::cout << "栈未满" << std::endl;
}
上述代码中,定义了两个指向成员函数的指针empty和full,通过在对象名前加上"."和"*"来调用成员函数指针。如果不使用成员函数指针,直接在代码中调用成员函数,可以这样写:
Stack s(10);
if (s.stackEmpty()) {
std::cout << "栈为空" << std::endl;
} else {
std::cout << "栈不为空" << std::endl;
}
if (s.stackFull()) {
std::cout << "栈已满" << std::endl;
} else {
std::cout << "栈未满" << std::endl;
}