1

基本クラスから継承するいくつかの例外クラスを C++ で作成していますが、コンパイルできない理由がわかりません。どんな助けでも大歓迎です。

Base Class: RandomAccessFileException.h

#ifndef RANDOMACCESSFILEEXCEPTION_H
#define RANDOMACCESSFILEEXCEPTION_H

class RandomAcessFileException
{
public:
    RandomAcessFileException();
    virtual const char* getMessage() = 0;
protected:
    char m_message[100];
};

#endif

Derived Class: RandomAccessFileNotFoundException.h

#ifndef RANDOMACCESSFILENOTFOUNDEXCEPTION_H
#define RANDOMACCESSFILENOTFOUNDEXCEPTION_H

#include "RandomAccessFileException.h"

class RandomAccessFileNotFoundException : public RandomAccessFileException
{
public:
    RandomAccessFileNotFoundException(const char* p_filename);
    const char* getMessage();
};

#endif

RandomAccessFileNotFoundException.cpp

#include <cstring>

#include "RandomAccessFileException.h"
#include "RandomAccessFileNotFoundException.h"

RandomAccessFileNotFoundException::RandomAccessFileNotFoundException(const char* p_filename)
{
    strcat(m_message, "RandomAccessFileNotFoundException: File: ");
    strcat(m_message, p_filename);
}

const char* RandomAccessFileNotFoundException::getMessage()
{
    return m_message;
}

g++ 言います:

RandomAccessFileNotFoundException.cpp:4:0 からインクルードされたファイル: RandomAccessFileNotFoundException.h:13:1: エラー: '{' トークンの前に期待されるクラス名 RandomAccessFileNotFoundException.cpp: コンストラクター 'RandomAccessFileNotFoundException::RandomAccessFileNotFoundException(const char*)': RandomAccessFileNotFoundException .cpp:8:12: エラー: 'm_message' はこのスコープで宣言されていません RandomAccessFileNotFoundException.cpp: メンバー関数 'const char* RandomAccessFileNotFoundException::getMessage()': RandomAccessFileNotFoundException.cpp:14:12: エラー: 'm_message'このスコープで宣言されていませんでした

4

1 に答える 1

1

最初の問題:

必ず:

#include "RandomAccessFileException.h"

RandomAccessFileNotFoundException.hヘッダーファイルには、(つまり)の基本クラスの定義が含まれているためRandomAccessFileNotFoundExceptionですRandomAccessFileException

要約すると、ヘッダーファイルのRandomAccessFileNotFoundException.hヘッダーは次のようになります。

#ifndef RANDOMACCESSFILENOTFOUNDEXCEPTION_H
#define RANDOMACCESSFILENOTFOUNDEXCEPTION_H

#include "RandomAccessFileException.h"

class RandomAccessFileNotFoundException : public RandomAccessFileException
//                                               ^^^^^^^^^^^^^^^^^^^^^^^^^
//                                               This class is defined in the
//                                               RandomAccessFileException.h
//                                               header, so you have to #include
//                                               that header before using this
//                                               class as a base class.
{
public:
    RandomAccessFileNotFoundException(const char* p_filename);
    const char* getMessage();
};

#endif

2番目の問題:

また、タイプミスがあることに注意してください。あなたの基本クラスは次のように呼ばれます:

RandomAcessFileException
//     ^

それ以外の:

RandomAccessFileException
//     ^^

で使用している名前ですRandomAccessFileException.h

3 番目の問題:

最後に、宣言だけを提供した基本クラスの ( ) コンストラクターの定義がありません。RandomAccessFile

class RandomAcessFileException
{
public:
    RandomAcessFileException();
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//  This is a DECLARATION of the constructor, but the definition is missing
    virtual const char* getMessage() = 0;
protected:
    char m_message[100];
};

定義を指定しないと、リンカーは未解決の参照エラーを発行します。

于 2013-05-10T21:32:05.100 に答える