我试图用C ++重载运算符。
我正在创建一个自定义Stack数据结构。
这是Stack.h
目录中的headers
:
/*******************************************************************************
* 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
编译好并在对象目录中生成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
运算符。那么可能的问题是什么?
请帮忙。
答案 0 :(得分:8)
您已经重载了预递减运算符int operator--();
但是您正在使用后递减运算符,该运算符具有重载签名int operator--(int);
int
参数只是用于区分前缀和后缀版本。
答案 1 :(得分:0)
你有超载的预递减运算符,你正在使用后递减运算符。