I'm having trouble using a struct that I declared in a different namespace. In File1.h I declare the struct and put it in namespace "Foo".
//File1.h
namespace Foo{
struct DeviceAddress;
}
struct DeviceAddress {
uint8_t systemID;
uint8_t deviceID;
uint8_t componentID;
};
In File2.c I try to create an instance of that struct:
//File2.c
#include "File1.h"
struct Foo::DeviceAddress bar;
But I get an error for the line in File2.c where I try to declare the struct. The error message is: error C2079: 'bar' uses undefined struct 'Foo::DeviceAddress'
I'm using the MS C++ compiler with Visual Studio as a development environment.
Am I making some sort of syntax error trying to declare 'bar' or am I not understanding something about namespaces or structs?
The two DeviceAddress
es in File1.h
are not the same struct : one is inside namespace Foo
, the other is in the global namespace.
When you define a struct that's inside a namespace, you have to mention its namespace:
struct Foo::DeviceAddress {
uint8_t systemID;
uint8_t deviceID;
uint8_t componentID;
};
Or simply declare and define it at the same time, which would be the recommended way:
namespace Foo{
struct DeviceAddress {
uint8_t systemID;
uint8_t deviceID;
uint8_t componentID;
};
}
The problem is in the definition of your struct
: it needs to be defined in the namespace too:
namespace Foo {
struct DeviceAddress {
uint8_t systemID;
uint8_t deviceID;
uint8_t componentID;
};
}
You're currently defining a separate Foo
in the global namespace.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.