在C ++中的多个文件中使用多个名称空间中的类

时间:2012-08-06 04:53:47

标签: c++ avr-gcc

我在使用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_ */

1 个答案:

答案 0 :(得分:2)

  

类“Pin”在命名空间“IO”中定义,该命名空间位于   命名空间“uC”。此类在名为的头文件中定义   “IO.hpp”,包含在“LIBcpp.hpp”中。

IO.hpp包括LIBcpp.hpp。你有圆形内含物 - 这是非常糟糕的。您必须更改标题结构,以便没有圆形包含。