1

次のコードをavr-g++(AVR マイクロコントローラー用の C++ コンパイラー) でコンパイルする際に問題があります。

#ifndef SPI_H_
#define SPI_H_


#include "../LIBcpp.hpp"
namespace uC
{
    namespace SPI
    {
        class Device
        {
        private:
            SPI* m_SPI;
            uC::IO::Pin* m_CSPin;
            ChipSelectPolarity m_CSPolarity;

        public:
            Device(SPI& _SPI, uC::IO::Pin& _CSPin, ChipSelectPolarity _CSPolarity);

            void Select();
            void DeSelect();

            void WriteByte(uint8_t _Data);
            uint8_t WriteReadByte(uint8_t _Data);

            void WriteBytes(uint8_t _Data[], uint8_t _DataLength);
            void WriteReadBytes(uint8_t _Data[], uint8_t _ReadBuffer[], uint8_t _DataLength);
        };
    }
}


#endif /* SPI_H_ */

このクラスで使用されるいくつかの列挙型とクラスをこのファイル内に定義しましたが、コードが長くなりすぎないように含まれていないことに注意してください。

エラーが表示されます

'IO' in namespace 'uC' does not name a type
'uC::IO' has not been declared
 expected ',' or '...' before '&' token

私のプロジェクトには、modules作業中のプロジェクトに固有のものを表すいくつかのファイルがあります。これらのファイルは、 という名前のサブディレクトリにありModulesます。ヘッダーファイルLIBcpp.hppはその上のディレクトリにあります。Modulesサブディレクトリ内のすべてのヘッダー ファイルが含まれます。

クラスPinは、名前空間内にある名前空間内で定義されIOますuCIO.hppこのクラスは、 によってインクルードされるという名前のヘッダー ファイルで定義されますLIBcpp.hpp

私が試したこと:

IO.hppヘッダー ファイルにヘッダー ファイルを含めるSPI.hpp- 同じエラーが発生する

このエラーを解決する方法がわかりません。この問題を解決するためにさらにコードや情報が必要な場合は、提供します。

ありがとう!

これはIO.hpp、要求されたとおりです。

#ifndef IO_H_
#define IO_H_


#include "../LIBcpp.hpp"

namespace uC
{
    namespace IO
    {
        class Port
        {
                //Contents removed
        };

        class Pin
        {
                //Contents removed
        };
    }
}


#endif /* IO_H_ */
4

1 に答える 1

2

クラス「Pin」は、名前空間「uC」内にある名前空間「IO」内で定義されます。このクラスは、「LIBcpp.hpp」に含まれる「IO.hpp」という名前のヘッダー ファイルで定義されます。

しかしIO.hpp含まれていLIBcpp.hppます。円形のインクルージョンがあります - これは非常に悪いです。循環的な包含がないように、ヘッダー構造を変更する必要があります。

于 2012-08-06T05:36:02.500 に答える