我在使用我在不同命名空间中声明的结构时遇到了麻烦。在File1.h中,我声明了结构并将其放在命名空间“Foo”中。
//File1.h
namespace Foo{
struct DeviceAddress;
}
struct DeviceAddress {
uint8_t systemID;
uint8_t deviceID;
uint8_t componentID;
};
在File2.c中,我尝试创建该结构的实例:
//File2.c
#include "File1.h"
struct Foo::DeviceAddress bar;
但是我在File2.c中遇到错误,我尝试声明结构。错误消息是: 错误C2079:'bar'使用未定义的struct'Foo :: DeviceAddress'
我正在使用MS C ++编译器和Visual Studio作为开发环境。
我是否在尝试声明'bar'时出现某种语法错误,或者我不了解有关命名空间或结构的内容?
答案 0 :(得分:3)
问题在于struct
的定义:它也需要在命名空间中定义:
namespace Foo {
struct DeviceAddress {
uint8_t systemID;
uint8_t deviceID;
uint8_t componentID;
};
}
您目前正在全局命名空间中定义一个单独的Foo
。
答案 1 :(得分:2)
DeviceAddress
中的两个File1.h
不是相同的struct :一个位于名称空间Foo
内,另一个位于全局名称空间中。
当您定义名称空间内的结构时,您必须提及其名称空间:
struct Foo::DeviceAddress {
uint8_t systemID;
uint8_t deviceID;
uint8_t componentID;
};
或者只是同时声明和定义它,这是推荐的方式:
namespace Foo{
struct DeviceAddress {
uint8_t systemID;
uint8_t deviceID;
uint8_t componentID;
};
}