diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index f582aa8f2..4ae6b7e8e 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -1316,7 +1316,13 @@ class CppGenerator : public BaseGenerator { code_.SetValue("PARAM_TYPE", "const char *"); code_.SetValue("PARAM_VALUE", "nullptr"); } else if (direct && field.value.type.base_type == BASE_TYPE_VECTOR) { - auto type = GenTypeWire(field.value.type.VectorType(), "", false); + const auto vtype = field.value.type.VectorType(); + std::string type; + if (IsStruct(vtype)) { + type = WrapInNameSpace(*vtype.struct_def); + } else { + type = GenTypeWire(vtype, "", false); + } code_.SetValue("PARAM_TYPE", "const std::vector<" + type + "> *"); code_.SetValue("PARAM_VALUE", "nullptr"); } else { @@ -1908,11 +1914,16 @@ class CppGenerator : public BaseGenerator { ",\n {{FIELD_NAME}} ? " "_fbb.CreateString({{FIELD_NAME}}) : 0\\"; } else if (field.value.type.base_type == BASE_TYPE_VECTOR) { - auto type = GenTypeWire(field.value.type.VectorType(), "", false); - code_ += - ",\n {{FIELD_NAME}} ? " - "_fbb.CreateVector<" + - type + ">(*{{FIELD_NAME}}) : 0\\"; + code_ += ",\n {{FIELD_NAME}} ? \\"; + const auto vtype = field.value.type.VectorType(); + if (IsStruct(vtype)) { + const auto type = WrapInNameSpace(*vtype.struct_def); + code_ += "_fbb.CreateVectorOfStructs<" + type + ">\\"; + } else { + const auto type = GenTypeWire(vtype, "", false); + code_ += "_fbb.CreateVector<" + type + ">\\"; + } + code_ += "(*{{FIELD_NAME}}) : 0\\"; } else { code_ += ",\n {{FIELD_NAME}}\\"; } diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index 8f939cd5f..1079c0801 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -1166,7 +1166,7 @@ inline flatbuffers::Offset CreateMonsterDirect( Color color = Color_Blue, Any test_type = Any_NONE, flatbuffers::Offset test = 0, - const std::vector *test4 = nullptr, + const std::vector *test4 = nullptr, const std::vector> *testarrayofstring = nullptr, const std::vector> *testarrayoftables = nullptr, flatbuffers::Offset enemy = 0, @@ -1186,9 +1186,9 @@ inline flatbuffers::Offset CreateMonsterDirect( float testf2 = 3.0f, float testf3 = 0.0f, const std::vector> *testarrayofstring2 = nullptr, - const std::vector *testarrayofsortedstruct = nullptr, + const std::vector *testarrayofsortedstruct = nullptr, const std::vector *flex = nullptr, - const std::vector *test5 = nullptr, + const std::vector *test5 = nullptr, const std::vector *vector_of_longs = nullptr, const std::vector *vector_of_doubles = nullptr, flatbuffers::Offset parent_namespace_test = 0) { @@ -1202,7 +1202,7 @@ inline flatbuffers::Offset CreateMonsterDirect( color, test_type, test, - test4 ? _fbb.CreateVector(*test4) : 0, + test4 ? _fbb.CreateVectorOfStructs(*test4) : 0, testarrayofstring ? _fbb.CreateVector>(*testarrayofstring) : 0, testarrayoftables ? _fbb.CreateVector>(*testarrayoftables) : 0, enemy, @@ -1222,9 +1222,9 @@ inline flatbuffers::Offset CreateMonsterDirect( testf2, testf3, testarrayofstring2 ? _fbb.CreateVector>(*testarrayofstring2) : 0, - testarrayofsortedstruct ? _fbb.CreateVector(*testarrayofsortedstruct) : 0, + testarrayofsortedstruct ? _fbb.CreateVectorOfStructs(*testarrayofsortedstruct) : 0, flex ? _fbb.CreateVector(*flex) : 0, - test5 ? _fbb.CreateVector(*test5) : 0, + test5 ? _fbb.CreateVectorOfStructs(*test5) : 0, vector_of_longs ? _fbb.CreateVector(*vector_of_longs) : 0, vector_of_doubles ? _fbb.CreateVector(*vector_of_doubles) : 0, parent_namespace_test);