Adi*_*ngh -2 c++ operator-overloading
我试图在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
Run Code Online (Sandbox Code Playgroud)
我的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;
}
}
Run Code Online (Sandbox Code Playgroud)
我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;
}
Run Code Online (Sandbox Code Playgroud)
我headers,sources和objects目录在Stack目录中.
我的终端指向Stack目录.
现在我编译了Stack.cpp这样的文件:
gcc -c sources/Stack.cpp -o objects/Stack.o
Run Code Online (Sandbox Code Playgroud)
它编译得很好,并Stack.o在对象目录中生成了该文件.
但是当我Main.cpp像这样编译文件时:
gcc sources/Main -o Stack objects/Stack.o
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误:
Main.cpp:66:43: error: cannot decrement value of type 'Stack'
case 2: cout << "Just pushed " << stack-- << endl;
Run Code Online (Sandbox Code Playgroud)
当我试图--(减少)值时,它会发现一些问题stack.但是我把--操作员重载了class Stack.那么可能的问题是什么?
请帮忙.
您已经重载了预递减运算符,int operator--();但是您正在使用具有过载签名的后递减运算符.int operator--(int);该int参数只是用于区分前缀和后缀版本的标记.