Пример flatbuffers дает нестандартные синтаксические ошибки при компиляции в VS2017 - PullRequest
0 голосов
/ 27 июня 2018

Я пытался воспроизвести что-то еще более простое, чем образец 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;

1 Ответ

0 голосов
/ 28 июня 2018

compare->pos относится к функции доступа, попробуйте добавить ()

...