在C++中跨多个文件在多个命名空间中使用类

Using a classes within multiple namespaces across multiple files in C++

本文关键字:文件 C++ 命名空间      更新时间:2023-10-16

我使用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中。

我尝试过的:

SPI.hpp头文件中包含IO.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_ */

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

但CCD_ 14包括CCD_。你有圆形夹杂物——这是非常糟糕的。您必须更改收割台结构,这样就不会出现圆形夹杂物。