google / google/flatbuffers

Invalid generated namespace for "CreateXXX" function for native_type table field

Open
#8,915 2 comments 0 reactions 1 assignee Claimed by @jtdavis777 View on GitHub
c++
Dominant language
C++
Stars
26.5k
Forks
3.7k
PR merge metrics
No merged PRs in 30d

Description

Flatbuffers v25.12.19 (master@af8997b5 too).

Consider having two fbs schemas, _basic.fbs_:
```fbs
native_include "Bitmap.hpp"; // native basic::Bitmap implementation.

namespace basic.fbs; // have to place (basic::fbs::BitmapT) to other namespace than basic::Bitmap

table Bitmap(native_type:"basic::Bitmap") {
buffer:[uint64];
}
```
And includer one schema **in a different directory hierarchy**, _includer.fbs_:
```fbs
include "basic.fbs";

namespace includer; // expect to have includer::TableT

table Table {
bm:basic.fbs.Bitmap (required);
}
```
Generating with object API and proper include directory for includer schema (to get _include_ instruction work) produces invalid reference to _CreateBitmap_ function in _includer_generated.h_:
```cpp
namespace includer {
// ...
inline ::flatbuffers::Offset Table::Pack(::flatbuffers::FlatBufferBuilder &_fbb, const TableT* _o, const ::flatbuffers::rehasher_function_t *_rehasher) {
(void)_rehasher;
(void)_o;
struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const TableT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
auto _bm = _o->bm ? CreateBitmap(_fbb, _o->bm.get(), _rehasher) : 0;
return includer::CreateTable(
_fbb,
_bm);
}
...
} // namespace includer
```
Compiler error:
```
/[REDACTED]/Table_generated.h: error: use of undeclared identifier 'CreateBitmap'; did you mean 'basic::fbs::CreateBitmap'?
1454 | auto _bm = _o->bm ? CreateBitmap(_fbb, _o->bm.get(), _rehasher) : 0;
| ^~~~~~~~~~~~
| ::basic::fbs::CreateBitmap
/[REDACTED 2]/basic_generated.h: note: 'basic::fbs::CreateBitmap' declared here
96 | inline ::flatbuffers::Offset CreateBitmap(::flatbuffers::FlatBufferBuilder &_fbb, const basic::Bitmap *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
| ^
```
___
Note: adding compiler suggested namespaces manually gives me expected (according to docs) linker errors
```
error: undefined symbol: basic::fbs::Bitmap::Pack(flatbuffers::FlatBufferBuilderImpl&, basic::Bitmap const*, std::__1::function const*)
error: undefined symbol: basic::fbs::Bitmap::UnPackTo(basic::Bitmap*, std::__1::function const*) const
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.