首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不完全类型‘class odb::access::object_traits_impl<Person,(odb::database_id)1>’的无效使用

不完全类型‘class odb::access::object_traits_impl<Person,(odb::database_id)1>’的无效使用
EN

Stack Overflow用户
提问于 2017-08-10 11:34:24
回答 1查看 575关注 0票数 0

我编写了过于简单的odb示例,并从文档中复制所有代码,但是当调用db.persist(john)编译器时说

/usr/include/odb/traits.hxx:在“struct::object_traits_impl”的实例化中:/usr/include/obase.txx:61:28: required from‘typename odb::object_traits::id_type odb::database::persist_(const typename odb::object_traits::pointer_type&)和T= Person;odb::database_id DB = (odb::database_id)1;typename odb::object_traits::id_type = odb::access::object_traits::id_type;odb::object_traits::pointer_type =Person*‘/usr/odb::object_traits::pointer_type/odb/sqlite/database.ixx:47:37: required 37’typename odb::object_traits::id_type odb::sqlite::odb::object_traits::pointer_type:数据库:持久化(T*)和T= Person;typename odb::object_traits::id_type =odb::access::object_traits::id_type‘odb::access::object_traits::id_type’需要从这里/usr/odb::access::object_traits::id_type/odb/traits.hxx:177:10: error:无效使用不完整类型‘class odb::access::object_traits_impl’结构object_traits_impl:

怎么了?

我的密码:

main.cpp

代码语言:javascript
复制
using namespace std;
using namespace odb::core;

int main(int argc, char **argv) {

odb::sqlite::database db("sqlite.db", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);

    Person john("John", "Doe", 33);
//    Person jane("Jane", "Doe", 32);
//    Person joe("Joe", "Dirt", 30);

//    odb::transaction t(db.begin());
    db.persist(john);
//    t.commit();

    return 0;
}

Person.h

代码语言:javascript
复制
#pragma db object
class Person
{
public:
    Person (const std::string& first,
            const std::string& last,
            unsigned short age)
            : first_ (first), last_ (last), age_ (age)
    {
    }

    const std::string&
    first () const
    {
        return first_;
    }

    const std::string&
    last () const
    {
        return last_;
    }

    unsigned short
    age () const
    {
        return age_;
    }

    void
    age (unsigned short age)
    {
        age_ = age;
    }

private:
    friend class odb::access;

    Person () {}

#pragma db id auto
    unsigned long id_;

    std::string first_;
    std::string last_;
    unsigned short age_;
};

odb编译命令

代码语言:javascript
复制
odb -dsqlite --generate-query --generate-session --generate-schema --generate-prepared --output -dir/home/mohsen/Desktop/Workstation/Projects/C++/Rubik/cmake-build-debug/odb_gen --hxx-suffix.h --ixx-suffix_inline.h --cxx-suffix.cpp --odb-file-suffix_odbPerson.h
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 13:57:59

您将得到此错误,因为‘class odb::access::object_traits_impl<Person, (odb::database_id)1>’是在odb生成的文件Person-odb.hxx中定义的。

"Person-odb.hxx"文件开始时包括main.cpp将解决您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45612608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档