Я пытался воспроизвести что-то еще более простое, чем образец C ++, в: https://github.com/google/flatbuffers/blob/master/samples/sample_binary.cpp
Но я получаю некоторые ошибки компиляции в VS2017 по строкам
//auto pos = compare->pos;
//auto two = compare->deviceType;
//auto desc = compare->description;
Если я их закомментирую, он компилируется и запускается. Если нет, то я получаю следующие ошибки:
Severity Code Description Project File Line Suppression State
Error C3867 'PNT::PseudoGPS::pos': non-standard syntax; use '&' to create a pointer to member LinkWareMessageBus d:\source\linkwaremessagebus\linkwaremessagebus.cpp 50
Error C3867 'PNT::PseudoGPS::deviceType': non-standard syntax; use '&' to create a pointer to member LinkWareMessageBus d:\source\linkwaremessagebus\linkwaremessagebus.cpp 51
Error C3867 'PNT::PseudoGPS::description': non-standard syntax; use '&' to create a pointer to member LinkWareMessageBus d:\source\linkwaremessagebus\linkwaremessagebus.cpp 52
Вот определение моего объекта FBS:
// Example IDL file for the PNT Schema
namespace PNT;
enum DeviceType:byte { IMU, VAN, GPS, MAGNAV, SOOP }
struct Vec3 {
x:float;
y:float;
z:float;
}
table PseudoGPS {
pos:Vec3;
deviceType:DeviceType = GPS;
description: string;
}
root_type PseudoGPS;
А вот код, который создает объект FB, а затем пытается получить доступ к вещам (сейчас я просто изучаю, код еще не закончен).
flatbuffers::FlatBufferBuilder builder(1024);
auto position = PNT::Vec3(4.0, 5.0, 6.0);
auto description = builder.CreateString("Magnetic Postion");
auto msg = PNT::CreatePseudoGPS(builder, &position, PNT::DeviceType_MAGNAV, description);
builder.Finish(msg);
uint8_t *buf = builder.GetBufferPointer();
int size = builder.GetSize();
auto compare = PNT::GetPseudoGPS(buf);
auto pos = compare->pos;
auto two = compare->deviceType;
auto desc = compare->description;