在Mac上的c++中无法重载'——'操作符
Overloading `--` operator is not working in C++ on Mac
我正在尝试在c++中重载操作符。
我正在创建一个自定义堆栈数据结构。
这是headers
目录下的Stack.h
:
/*******************************************************************************
* Stack -- *
* This class will just interface a stack of integers. *
* A stack is a linear data structure. Elements are pushed into stack from the *
* bottom and is popped from the top. *
* *
* Author -- Aditya R.Singh *
* Version -- 1.0 *
* Since -- 2014-06-24 *
*******************************************************************************/
#ifndef STACK_H
#define STACK_H
class Stack {
public:
Stack(); // To initiallize stuff.
void operator>>(int); // To push elements in the stack.
int operator--(); // To pop element from the stack.
void display_stack(); // To display the whole stack.
private:
typedef struct stack {
int data;
struct stack *top, *previous;
} node; // The structure of the whole stack.
node *PTR; // To point to the top of the stack.
node *BUFFER; // To temporarily store the node to be freed.
int data; // Data to be popped from the stack.
int choice; // To get choice of the user.
};
#endif
我的Stack.cpp
文件,在我的sources
目录是:
/*******************************************************************************
* Stack -- *
* This file contains the implementation of all functions from the class Stack.*
* *
* Author -- Aditya R.Singh *
* Version -- 1.0 *
* Since -- 2014-06-24 *
*******************************************************************************/
#include <iostream>
#include "../headers/Stack.h"
using namespace std;
Stack::Stack() {
PTR->top = NULL;
PTR->previous = NULL;
}
void Stack::operator>>(int data) {
PTR = (node*)malloc(sizeof(node));
PTR->previous = PTR->top;
PTR->top = PTR;
PTR->data = data;
}
int Stack::operator--() {
BUFFER = PTR->top;
data = BUFFER->data;
PTR->top = PTR->previous;
free(BUFFER);
return data;
}
void Stack::display_stack() {
BUFFER = PTR;
while(BUFFER != NULL) {
cout << BUFFER->data << endl;
BUFFER = BUFFER->previous;
}
}
我的Main.cpp
在sources
目录:
/*******************************************************************************
* Main -- *
* This program will demonstrate the use of a stack. *
* *
* Author -- Aditya R.Singh *
* Version -- 1.0 *
* Since -- 2014-06-24 *
*******************************************************************************/
#include <iostream>
#include "../headers/Stack.h"
using namespace std;
int get_choice() {
int choice = 0;
cout << "*************************************" << endl;
cout << "************ STACK ***********" << endl;
cout << "*************************************" << endl;
cout << "********** 0> QUIT APP *********" << endl;
cout << "********** 1> PUSH *********" << endl;
cout << "********** 2> POP *********" << endl;
cout << "********** 3> DISPLAY STACK *********" << endl;
cout << "********** 4> CLEAR CONSOLE *********" << endl;
cout << "*************************************" << endl;
cout << endl << "Enter choice = ";
cin >> choice;
return choice;
}
int main() {
Stack stack;
int choice = -1;
int data;
while(choice) {
choice = get_choice();
switch(choice) {
case 1: cout << "Enter number to be pushed = ";
cin >> data;
stack >> data;
break;
case 2: cout << "Just pushed " << stack-- << endl;
break;
case 3: stack.display_stack();
break;
case 4: system("clear");
break;
default: cout << "Invalid choice!" << endl;
break;
}
}
return 0;
}
我的headers
, sources
和objects
目录在Stack
目录下。
我的终端指向Stack
目录。
现在我像这样编译Stack.cpp
文件:
gcc -c sources/Stack.cpp -o objects/Stack.o
它编译得很好,并在objects目录中生成了Stack.o
文件。
但是当我像这样编译Main.cpp
文件时:
gcc sources/Main -o Stack objects/Stack.o
显示如下错误:
Main.cpp:66:43: error: cannot decrement value of type 'Stack'
case 2: cout << "Just pushed " << stack-- << endl;
当我试图--
(递减)stack
的值时,它发现了一些问题。但是我在class Stack
中重载了--
运算符。那么可能的问题是什么呢?
请帮。
您已经重载了预减量运算符int operator--();
,但是您正在使用具有重载签名int operator--(int);
的后减量运算符。int
参数只是一个标记,用于区分前缀和后缀版本。
您重载了预减量操作符,并且正在使用后减量操作符