1

カスタム例外をスローするメソッドが必要ですが、このエラーが発生し続けます:
error C2059: syntax error : 'string'

次のリンクを読んでいましたが、問題は解決しません:
http://msdn.microsoft.com/en-us/library/t8xe60cf%28VS.80%29.aspx

これは私が持っているコードです:

#include <exception>
#include <stdexcept>
#include <string>
#include "Log.h"

LOG_USE()

class Exception : public std::exception 
{
    public:
        explicit Exception(std::string msg)
            : message(msg)
        {}
        ~Exception()
        {}

        virtual const char* what() const  throw() 
        {
            LOG_MSG(message) // write to log file
            return message.c_str();
        }

    private:
        std::string message;
};

#endif

アプリのどこかに、次のようなメソッドがあります。

.....
....
void view::setDisplayView(ViewMode mode) throw(Exception("setDisplayView error"))
{
    ;
}
....
....

ここで何が間違っていますか?
32 ビット Windows XP で Visual Studio 2008 を使用しています。

4

1 に答える 1

4

例外仕様を正しく使用していません。throwの宣言に続くThatには、オブジェクト ( that で得られるもの) ではなく、setDisplayView型 (あなたの場合は ) のみを含める必要があります。ExceptionException("setDisplayView error")

そうは言っても、例外仕様は C++11 では非推奨であり、以前は有用な機能とは見なされていませんでした。それを省略したほうがいいですthrow(Exception("setDisplayView error"))。例外指定は、何もスローしない場合にのみ使用してください。その場合、使用する新しい構文はnotrowになります。

編集:

から例外がスローされたことを示すには、setDisplayView作成時にその情報を例外に渡す必要があります。

void view::setDisplayView(ViewMode mode)
{
     if (badThingHappened())
          throw Exception("setDisplayView error");
}

例外をキャッチするときに例外の原因を見つけるためのさまざまな非標準の手法があり、ここでいくつか見つけることができます。例外仕様を使用することは、それらの1つではありません...

于 2012-07-02T06:18:38.950 に答える