2017-01-09 7 views
3

私は小さな例外クラスを作成しました。私はスローされませんコンストラクタを作りたいが、いくつかの理由のために、コンパイラは、「すべてのキャッチ」のハンドラにもかかわらず、コンストラクタによってスローされる可能性がある私に言っている:C++なぜこれをスローできますか?

invalid_csv::invalid_csv(size_t r, size_t c, const char * msg) throw() 
try : 
    std::runtime_error(msg), 
    row(r), 
    col(c), 
    m_init_ok(true) 
{ 
} 
catch(...) 
{ 
    m_init_ok = false; 
} 

を。

warning C4297: 'csvrw::invalid_csv::invalid_csv': function assumed not to throw an exception but does 

なぜですか?ありがとうございました。

+2

は[MCVE] – user2079303

答えて

4

C4297を解決するには、__declspec(nothrow)、noexcept(true)またはthrow()と宣言されている関数に例外をスローしないでください。あるいは、noexcept、throw()、または__declspec(nothrow)の指定を削除してください。

Source

このような、いわゆる関数のtry-ブロックは、例外が外に取得することを防止することはできません。コンストラクタが実行を終了できないため、オブジェクトが完全に構築されないことを考慮してください。キャッチブロックは、何か他のものを投げるために持っているか、現在の例外が

読むthis answer

+0

感謝を作成して再スローされますが、これはそれを解決しない、問題を隠すことになります。 – Virus721

+1

@ Virus721この回答の解説をお読みくださいhttp://stackoverflow.com/questions/26267331/function-try-block-and-noexcept – parik

+1

ありがとうございました。これをあなたの答えに加えてください。 – Virus721

関連する問題