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在命名空间内uC。此类定义在名为 的头文件中IO.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”在命名空间“IO”中定义,该命名空间在命名空间“uC”中。此类在名为“IO.hpp”的头文件中定义,该文件包含在“LIBcpp.hpp”中。

IO.hpp包括LIBcpp.hpp. 你有圆形夹杂物——这非常糟糕。您必须更改标题结构,以免出现循环包含。

于 2012-08-06T05:36:02.500 回答