我在使用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_ */
答案 0 :(得分:2)
类“Pin”在命名空间“IO”中定义,该命名空间位于 命名空间“uC”。此类在名为的头文件中定义 “IO.hpp”,包含在“LIBcpp.hpp”中。
但IO.hpp
包括LIBcpp.hpp
。你有圆形内含物 - 这是非常糟糕的。您必须更改标题结构,以便没有圆形包含。