多型とマップを試すためのサンプルC++プログラムを書いていました。 私は、次のマップがありますC++のstd :: mapは "*"に失敗していますか?
map<char,Operation*> ops;
ops['+'] = new Addition();
ops['-'] = new Subtraction();
ops['*'] = new Multiplication();
ops['/'] = new Division();
を各クラスがOperation
から継承し、操作は、その名前によって提案ありません。
Everytrhingは正常に機能しますが、ops['*']
にアクセスするとプログラムがクラッシュします。私は別のchar
を使用している場合は、これを言う:
ops['x'] = new Multiplication();
プログラムが動作します。
全体main
機能はこれです:
int main(int argc, char** argv){
int x = atoi(argv[1]);
char op = argv[2][0];
int y = atoi(argv[3]);
map<char,Operation*> ops;
ops['+'] = new Addition();
ops['-'] = new Subtraction();
ops['*'] = new Multiplication();
ops['/'] = new Division();
cout<<ops[op]->op(x,y)<<endl;
}
私は私の問題を繰り返すことになります:
私がメインに1 * 1
を渡すと、クラッシュが(SegmentationFault
)が発生します。
コードを編集して1 x 1
を渡すと正常に動作します。
紛失しているものがありますかstd::map
?たぶん、*
に関連する何かがワイルドカードか何かとして使用されていますか?
用語を見上げて「メモリリーク」し、再度 'new'を使用することはありません。 – nwp
'*'は多くのシェルの特殊文字です。これは基本的に現在のディレクトリ内のすべてのファイルに展開され、 '1 \ * 1'を渡すようにしてください。 – Holt
@nwpもし私がこれを掃除すれば、それは漏れではありません。私はそれがおもちゃのプログラムであり、すべてがすぐに死ぬからではありません! – magicleon