2017-01-09 2 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()로 선언 된 함수에서 예외를 throw하지 마십시오. 또는 noexcept, throw() 또는 __declspec (nothrow) 스펙을 제거하십시오.

Source

A는 함수 시도 블록과 같은 예외가 외부 얻을 것이다 막을 수 없습니다 소위. 생성자가 실행을 완료 할 수 없으므로 객체가 완전히 구성되지 않은 것으로 간주합니다. 캐치 블록은 다른 뭔가를 던져이 있거나 현재 예외는

읽기 this answer

+0

감사를 만들기 슬로우 다시되지만이 그것을 해결하지, 문제가 숨어있을 것입니다. – Virus721

+1

@ Virus721이 답변의 설명을 읽어보십시오. http://stackoverflow.com/questions/26267331/function-try-block-and-noexcept – parik

+1

감사합니다. 이 질문을 답에 추가하십시오. – Virus721

관련 문제