2014-09-19 69 views
0

我有一個非常簡單的關係設置,我無法獲得odb輸出來編譯,它給我下面的編譯器錯誤。我使用Qt智能指針來實現這種關係,無論我經歷多少種排列,我似乎總是會遇到同樣的錯誤。ODB關係無法編譯

/usr/local/include/odb/database.ixx:570:54: error: no matching function for call to ‘odb::object_traits_impl<Inspection, (odb::database_id)1u>::find(odb::database&, const id_type&)’ 

這裏是父類

#ifndef PART_H 
#define PART_H 

class Part; 

#include <odb/core.hxx> 
#include <odb/qt/lazy-ptr.hxx> 
#include <QtCore/QString> 
#include <QtCore/QByteArray> 
#include <QtCore/QUuid> 
#include <QtCore/QDateTime> 
#include <QtCore/QSharedPointer> 
#include <QtCore/QList> 
#include <QtCore/QSet> 
#include "Inspection.h" 

/** this class represents the atomic parts which are acquired */ 
#pragma db object 
class Part{ 
public: 

    /** public constructor */ 
    Part(QString id); 

    /** gets the id */ 
    const QString Id() const; 

    /** Get (or create) the inspection for a given system name */ 
    QSharedPointer<Inspection> GetInspection(QString systemName = ""); 

private: 

    /** constructor */ 
    Part(){} 

    /** odb needed reference */ 
    friend class odb::access; 

    /** a list of all of the inspections for this part */ 
    //#pragma db value_not_null inverse(parent) 
    QList<QSharedPointer<Inspection> > inspections; 

    /** holds a unique name/id for this object */ 
    #pragma db id 
    QString id; 
}; 

#endif // PART_H 

這裏是孩子

#ifndef INSPECTION_H 
#define INSPECTION_H 

class Inspection; 

#include <odb/core.hxx> 
#include <odb/qt/lazy-ptr.hxx> 
#include <QtCore/QString> 
#include <QtCore/QByteArray> 
#include <QtCore/QUuid> 
#include <QtCore/QDateTime> 
#include <QtCore/QSharedPointer> 
#include <QtCore/QList> 
#include <QtCore/QSet> 
//#include "SurfaceDefect.h" 
#include "vec2f.h" 
#include "Part.h" 
#include "MILImage.h" 

using namespace std; 

#pragma db object 
class Inspection{ 
public: 

    /** gets the full image object for this inspection */ 
    const QWeakPointer<MILImage> GetFullImage() const; 

    /** gets the start time of the inspection */ 
    const QDateTime GetStarted() const; 

    /** gets the end time of the inspection */ 
    const QDateTime GetEnded() const; 

    /** Gets the system name on which the inspection was acquired */ 
    const QString GetSystemName() const; 

    /** sets the full image and takes ownership of it */ 
    void SetFullImage(MILImage* fullImage); 

    /** sets the start time of the inspection */ 
    void SetStarted(QDateTime started); 

    /** Sets the end time of the inspection */ 
    void SetEnded(QDateTime ended); 

private: 

    /** constructor */ 
    Inspection(QString systemName); 

    /** odb needed reference */ 
    friend class odb::access; 

    /** we give access to the part class to allow for construction */ 
    friend class Part; 

    /** A unique identifier for the inspection */ 
    #pragma db id 
    QUuid id; 

    /** the name of the system which acquired the inspection */ 
    QString systemName; 

    /** The time and date the inspection was recorded to disk */ 
    QDateTime Recorded; 

    /** A vector of all defects */ 
    //#pragma db inverse(Source) 
    //QVector< QLazyWeakPointer<SurfaceDefect> > SurfaceDefects; 

    /** The username of the person inspecting the sheet */ 
    QString Username; 

    /** All the metadata crammed into one QString */ 
    QString MetaData; 

    /** The positions of the 4 corners of a sheet */ 
    // TODO: this should not be transient 
    #pragma db transient 
    Vec2f Corners[4]; 

    /** The time and date the inspection started */ 
    QDateTime started; 

    /** the time and date the inspection ended */ 
    QDateTime ended; 

    /** the full inspection image */ 
    #pragma db transient 
    QSharedPointer<MILImage> fullImage; 

    /** the parent part of this object */ 
    #pragma db not_null 
    QSharedPointer<Part> parent; 
}; 

#endif // INSPECTION_H 

任何幫助,這可以給予將是巨大的!

回答

0

我能從ODB開發者處獲得反饋,他聲稱當我無法像在Inspection類中那樣創建默認構造函數時會發生這種情況。謝謝鮑里斯!