2

「スタック」クラス テンプレートがあり、スタック内のアイテムのタイプとサイズを選択するだけです。

ここに私のメインがあります:
編集:
1. addItems/removeItems には、intStack ではなくスタック変数があります
。(見ずにコピーして、これらの演算子を変更するのを忘れていました)
http://pastebin.com/89M56ET6
..そして私のスタックヘッダー:
http://pastebin.com/xKfQVD88

私がやりたいことは、main で 2 つの "while" ループを取り、それらの内容を main の外の別々の関数に入れることです。「addItems」と「removeItems」という関数を作りたいです(実際には準備ができています)。
問題は、私の "add/remove-Items" 関数が実際には何もしないことです (つまり、メインのオブジェクトは空のままですか?)。これらの「while」ループが必要なものを作成している場合、すべて問題ありません (アイテムがスタックにプッシュされ、次に正しくポップされます)。メインのループの代わりに「addItems」と「removeItems」を使用している場合、機能を追加するだけです(関数から戻った後、すべてが消えます)。
Stack オブジェクトをポインターとして動的に作成しようとしましたが、次のようなエラーが発生しました

void addItems(Stack -int-) への未定義の参照

また

addItems(Stack -int- *&) の呼び出しに一致する関数がありません

問題は、Stack オブジェクトをこれらの関数に渡すにはどうすればよいかということです。
または、スタックヘッダーに間違いがありますか?

ご協力ありがとう御座います。

4

2 に答える 2

2

問題は、関数がStack<Type>値を取ることです。つまり、関数は独自のコピーを取得します。したがって、メインのオブジェクトは変更されません。

template <class Type>
void addItems(Stack<Type> stack);

参照渡しする必要があります。

template <class Type>
void addItems(Stack<Type>& stack);
于 2013-01-20T23:43:26.697 に答える
0

void addItems(スタック スタック);

スタックを値渡ししています。つまり、関数 addItems はスタック オブジェクトのコピーを受け取ります。参照で渡します。

また、 Stack オブジェクトには適切なコピーコンストラクターがないため、コピーしようとするとメモリの問題も発生します。

于 2013-01-20T23:48:23.613 に答える