[odb-users] Include of SQLite files and ODB compiler
Boris Kolpackov
boris at codesynthesis.com
Tue Nov 25 02:06:47 EST 2014
Hi Erez,
Erez Pics <picserez at gmail.com> writes:
> [Switched to plain text client, hope it helps]
Yes, much, much, better. Thank you.
> I used ifndef to make the ODB compiler ignore these includes:
> #ifndef ODB_COMPILER
> #include <odb/sqlite/database.hxx>
> #include <odb/sqlite/connection.hxx>
> #include <odb/sqlite/transaction.hxx>
> #endif // ODB_COMPILER
>
> Which indeed fixed the error and cause another one, because we are
> passing odb::sqlite::database object in our code, it does not know the
> sqlite namespace:
> error: 'sqlite' is not a member of 'odb'
>
> How would you recommend to resolve this problem ?
While you cannot include most libodb-sqlite headers into headers that
you compile with the ODB compiler, there is an exception: forward.hxx
which forward-declares odb::sqlite::database besides other things. So
the way I would suggest you structure your header/source is as follows:
// header
//
#include <odb/sqlite/forward.hxx>
class object
{
...
void do_it (odb::sqlite::database&);
};
// source
//
#include <odb/sqlite/database.hxx>
void object::do_it (odb::sqlite::database& db)
{
db.persist (*this);
}
The idea here is to only use/pass references/pointers to database in
the header for which a forward-declaration is sufficient. In the source
file, howevere, you include <odb/sqlite/database.hxx> and can call
database operations, etc.
Boris
More information about the odb-users
mailing list