2016-07-07 5 views
0

私は何をしようとしていますか?

私はCPPからクラスとヘッダーファイルに関するアドバイスが必要です

出力エラー(更新)

エラーがそれらを呼び出すことにより、2つの方法、POPやPUSHを使用してスタックを作成したい2つのコード、.cppファイルと.hのを、持っています:G ++ -Wall -O2 Stack.cpp -oスタック

CPPコード

# include <iostream> 

# include " LibStack.h " 

using namespace std; 
using namespace STACK; 

int main() 
{ 

Stack S1; 

int elm; 

cout << "Insert value:"<< endl; 
cin >> elm; 

S1.PUSH(elm); 

S1.POP(); 


return 0; 
} 
とPUSH(ヴァルをINT)オーバーロードすることができない(POPと同じ())

コンパイル

完全なリストであることにないふりを持つヘッダファイル

# ifndef _LibStack_H_ 

# define _LibStack_H_ 

# define MAX_STACK 10 

using namespace std; 
namespace STACK 
{ 

class Stack 
{ 

private: 

    int stack[MAX_STACK]; 
    int MIN_STACK = 0; 

public: 

    void PUSH(int); 
    void POP(); 

PUSH(int val) 
{ 

    if(MIN_STACK < MAX_STACK) 
    { 
     stack[MAX_STACK+1] = val; 
    } 
    else 
     cout << "Full stack!" << endl; 
} 

POP() 
{ 

    int aux; 

    if(MIN_STACK >= 0) 
    { 
     aux = stack--[MIN_STACK]; 
     cout << " POP " << endl << aux << endl; 
    } 
    else 
     cout << "Empty stack!" << endl; 

} 

}; 

} 
# endif // __LibStack_H_ 
+4

'。 – tkausl

+0

今、もっと疑問があります。テンプレートを使ってどのようにクラスを宣言しますか? – Bit89

+1

"Stack " " - <セミコロンがありません"; "そこ。 –

答えて

0

あなたはこのようなクラスを定義することができ、次のよう

class Stack 
{ 

private: 

    int stack[MAX_STACK]; 
    int MIN_STACK = 0; 

public: 
. . . 
} 

プッシュ機能を実現することができる。

あなたが挿入する前に、MIN_STACKの値をインクリメントするとき、あなたは常にスタックのままに[ 0]空でスペースを無駄にします。 MAX_STACKの値は常にPOP機能10.

void PUSH(int val) 
{ 
    if(MIN_STACK < MAX_STACK) 
    { 
     stack[MIN_STACK++] = val; 
/* 
Here MIN_STACK is incremented after insertion. It is the same as stack[MIN_STACK] = val; 
MIN_STACK +=1; 
*/ 

    } 
    else 
     cout << "Full stack!" << endl; 
} 

であるとしても、あなたのインデックスとないMAX_STACKとしてMIN_STACKを使用し、あなたが値MIN_STACKを押すたびにインクリメントされるためMIN_STACKが0である場合は、削除することは何もありません。 MIN_STACKは常に次の空き場所を指します。したがって、ポップアウトされるデータは(MIN_STACK-1)番目の位置にあります。したがって、MIN_PATHを減らして使用してください。あなたのcppファイルで

void POP() 
{ 

    int aux; 
    if(MIN_STACK > 0) 
    { 
     aux = stack[--MIN_STACK]; 

/* Here MIN_STACK is decremented before popping out. It is the same as MIN_STACK -= 1; 
     aux = stack[MIN_STACK]; */ 
     cout << " POP : " << aux << endl; 
    } 
    else 
     cout << "Empty stack!" << endl; 

} 

としてクラスのオブジェクトを作成します。テンプレート は `これはクラスが宣言されている方法ではありません

Stack S1; 
S1.PUSH(elm); 
S1.POP(); 
+0

ありがとう!!これは私の疑問のほとんどすべてをクリアしました:D – Bit89

0

以下、いくつかのランダムな点、。

class Stack // template <class Stack>

// void PUSH(int);
// void POP();

​​

stack[MIN_STACK++] = val; // MIN_STACK += 1; stack[MAX_STACK] = val;

void POP() // POP()

// if(MIN_STACK >= 0) { MIN_STACK -= 1; aux = stack[MIN_STACK+1];
if(MIN_STACK > 0) { aux = stack[--MIN_STACK];

関連する問題