2

私はC ++の本の例を見ていきます。そして、特定のケースを理解していませんでした。

main.cpp には、実行時例外を使用するための stdexcept.h が含まれています。また、ErrorHandlingModule.h も含まれます。

ErrorHandlingModule.h には、関数プロトタイプにランタイム エラー パラメーターがあるため、既に stdexcept.h が含まれています。

この本には、main.cpp にも stdexcept.h を含める必要があると書かれています。本のソースコードにもそのように書かれています。

main.cpp から sdtexcept.h を削除すると、コンパイルは問題なくパスし、プログラムは問題なく動作します。

しかし、なぜ本はそう言っているのですか?

回答ありがとうございます。

メイン.CPP:

#include <iostream>
#include <stdexcept>
#include "ErrorHandlingModule.h"
#include "Prompt.h"

// ....

int main(int argc, char* argv[])
{
    SAMSErrorHandlingModule::initialize();

    do
    {
            try
            {
                    char Operator = getOperator();
                    float Operand = getOperand();

                    cout << Accumulate( Operator, Operand ) << endl;
            }
            catch( runtime_error RuntimeError )
            {
                    SAMSErrorHandlingModule::handleRuntimeError(RuntimeError);
            }
            catch(...)
            {
                    SAMSErrorHandlingModule::handleNotaNumberError();
            };
    }while (SAMSPrompt::UserWantsToContinueYorN("More?"));

    return 0;
}

エラー処理モジュール.H

#include <stdexcept>

#ifndef _ERROR_HANDLING_MODULE_H
#define _ERROR_HANDLING_MODULE_H

namespace SAMSErrorHandlingModule
{
    using namespace std;

    void initialize( void );
    int handleNotaNumberError( void );
    int handleRuntimeError( runtime_error theRuntimeError );
}

#endif // _ERROR_HANDLING_MODULE_H
4

2 に答える 2

0

いいえ、両方のファイルで stdexcept の #include は必要ありません。プリプロセッサは、C コンパイラを介して実行する前に、ヘッダー ファイルを c ファイルにコピーします。同じヘッダー ファイルの複数のインクルードは非常に問題になる可能性があるため、サンプル コードでは、作成中のヘッダー ファイルに #ifndef を使用して、ヘッダー コードが 1 回だけインクルードされるようにしています。ただし、Stefano が言ったように、stdexcept をインクルードせずに ERRORHANDLINGMODULE ヘッダー ファイルの使用を停止すると、コードはコンパイルされなくなります。

于 2013-07-15T13:42:44.280 に答える