この名前DisplayStack
は、関数がスタックのみを表示し、スタックを変更しないことを示しています。したがって、引数はへの参照にするconst
ことができます。ただし、Stack
名前の接尾辞は引数によって暗示されているため冗長であるため、次のようにします。
#include <iostream>
using namespace std;
#include "stack.h"
typedef Stack< char > CharStack;
void display( CharStack const& stack )
{
// ... Display the stack
}
int main()
{
CharStack stack;
for( auto const ch : { 'a', 'b', 'c' } )
{
stack.push( ch );
}
display( stack );
}
ご了承ください …
関数は上 main
に移動しました。その場合、ばかげた純粋な宣言は必要なく、作業も少なくて済みます。ドライ:自分を繰り返さないでください。
関数定義の後の誤ったセミコロンは削除されました。まあ、少なくとも私はそれらが間違っていると思います。それらがそうであるかどうかにかかわらず、それらは完全に不要です。
これがデフォルトであるため、余分な入力return 0;
はmain
削除されました。ただし、一部のプログラマーはそれを明示的にすることを好みます。
欠点として、C++11ループはg++4.7.2で適切にコンパイルされますが、Visual C ++ 11.0では内部コンパイラエラー( ICE )が発生します。
[d:\ dev \ test]
> cl foo.cpp
foo.cpp
foo.cpp(7):警告C4100:'スタック':参照されていない仮パラメーター
foo.cpp(16):エラーC2059:構文エラー:'{'
foo.cpp(16):エラーC2143:構文エラー:';'がありません 前 '}'
c1xx:致命的なエラーC1063:内部コンパイラエラー
VisualC++でテクニカルサポートコマンドを選択してください
詳細については、[ヘルプ]メニューを表示するか、テクニカルサポートのヘルプファイルを開いてください。
[d:\ dev \ test]
> _
しかたがない。
それをあなたのやり方でやってください。;-)
Microsoftに報告されたコンパイラのバグ。