この質問にはGoogle検索がありますが、私の人生にとっては無関係の何百万もの回答を得られないとは思いません。 "このような"g ++とMSVCのC++引用の意味
ので、引用符の内側MSVCテキストで
はSTD ::文字列または、多分、のstd ::文字列&として、私が思うに、取られます。 g ++/gccでは常にconst char *と見なされます。本当ですか?
私は私がプレイしたいコードスニペットを発見し、それが
if(NULL == key)
throw exception("Empty key");
が含まれていますが、私は
を得るMSVC/VC++(2008(私はグラム上でそれを試し++(4.4.3)でうまくコンパイルno matching functions for calls to std::exception::exception(const char&)
私はこれが動作するようになった:
if (NULL == key)
{
std::string estr ("Empty key");
throw exception("Empty key");
}
をしかし、それは単なる醜いです
。これは私に別のエラーを得た:
std::string estr ("");
if (NULL == key)
{
estr = "Empty key";
throw exception("Empty key");
}
私は()は、その入力として期待するものは例外見当もつかない。私はstd :: stringかstd :: string &を提案した何かを見つけましたが、私はそのページを失いました。それ以来私が見つけた何百万もの役に立たないページは無用です。例外クラス、例外の使用に関するすべての種類の情報があります。
g ++に "これはstd :: string"であると伝える簡単な方法がありますか?&まだVC++を幸せに保ちますか? (明らかに私は、単一のソースからのクロスコンパイルコードをやろうとしている。)
そして、そのことについては、どのようにID
throw exception("Empty key");
throw "Empty key";
おかげで、
ウェス異なります
例外をスローします(新しいstd :: string( "Empty key"))。 –
@DrewBurchett: 'exception'にはデフォルト以外のコンストラクタはありませんので、メモリリークの作成が良いアイデアだったとしても動作しません。 –
@MikeSeymour:OK、多分私は誤解しています。コンパイラは例外がstd :: stringを期待していることを彼に伝えていませんか?もしそうなら、例外をスローしてstd :: stringを渡すと、コントロールは決して例外を越えて返されることはないので、破壊されるでしょうか? –