2012-02-05 5 views
1

У меня возникла проблема с автогенерированным кодом Qt's .Нужен совет по анализу ошибки компиляции Qt

По существу, когда я нажимаю, чтобы построить, я получаю ошибки ниже. Я не совсем уверен, что все это значит, и я был занят в течение последнего часа, пытаясь понять, что это значит, но я был бы признателен за более информированное объяснение того, что означают ошибки и как я могу избавиться от них.

class Product: public QObject 
{ 
    Q_OBJECT 
    Q_PROPERTY(QString _productid READ _productid WRITE _productid) 
    Q_PROPERTY(QString _productcategoryid READ _productcategoryid WRITE _productcategoryid) 
    Q_PROPERTY(QString _name READ _name WRITE _name) 
    Q_PROPERTY(Productcontent * contents READ contents WRITE contents)//dynamic allocation of space for contents 
    Q_PROPERTY(QString _productimagepath READ _productimagepath WRITE _productimagepath) 
    Q_PROPERTY(QString _producticonpath READ _producticonpath WRITE _producticonpath) 
    Q_PROPERTY(QString _productPrice READ _productPrice WRITE _productPrice) 

    //since this does not change for each product, no need resending it each time 
public: 

    static const string _xmldocpath; 
    static const string rootitemname; 
    static const string tagname; 
    QString _productid; 
    QString _name; 
    QString _productcategoryid; 
    QString _productimagepath; 
    QString _producticonpath; 
    QString _productPrice; 

    Product(); 
    //   const std::string &getfilepath(); 
    //   const std::string &getproducttagname(); 
    // bool UpdateProductData(string id); 
    Q_INVOKABLE int FindProductByID(QString id); 
    ~Product(); 
public slots: 

signals: 

}; 

следующие ошибки. Я не знаю, как это сделать. Любая помощь будет оценена.

debug\moc_product.cpp: In member function 'virtual int Productcontent::qt_metacall(QMetaObject::Call, int, void**)': 
debug\moc_product.cpp:77: error: no match for call to '(QString)()' 
debug\moc_product.cpp:78: error: no match for call to '(QString)()' 
debug\moc_product.cpp:84: error: no match for call to '(QString) (QString&)' 
debug\moc_product.cpp:85: error: no match for call to '(QString) (QString&)' 
debug\moc_product.cpp: In member function 'virtual int Product::qt_metacall(QMetaObject::Call, int, void**)': 
debug\moc_product.cpp:179: error: no match for call to '(QString)()' 
debug\moc_product.cpp:180: error: no match for call to '(QString)()' 
debug\moc_product.cpp:181: error: no match for call to '(QString)()' 
debug\moc_product.cpp:182: error: 'contents' was not declared in this scope 
debug\moc_product.cpp:183: error: no match for call to '(QString)()' 
debug\moc_product.cpp:184: error: no match for call to '(QString)()' 
debug\moc_product.cpp:185: error: no match for call to '(QString)()' 
debug\moc_product.cpp:191: error: no match for call to '(QString) (QString&)' 
debug\moc_product.cpp:192: error: no match for call to '(QString) (QString&)' 
debug\moc_product.cpp:193: error: no match for call to '(QString) (QString&)' 
debug\moc_product.cpp:194: error: 'contents' was not declared in this scope 
debug\moc_product.cpp:195: error: no match for call to '(QString) (QString&)' 
debug\moc_product.cpp:196: error: no match for call to '(QString) (QString&)' 
debug\moc_product.cpp:197: error: no match for call to '(QString) (QString&)' 
mingw32-make.exe[1]: Leaving directory `C:/Users/minel/QMLUIProject_One-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Debug' 
mingw32-make.exe[1]: *** [debug/moc_product.o] Error 1 
mingw32-make.exe: *** [debug] Error 2 
17:45:04: The process "C:\QtSDK\mingw\bin\mingw32-make.exe" exited with code 2. 
Error while building project QMLUIProject_One (target: Desktop) 
When executing build step 'Make' 
+0

Первое, что нужно спросить: Включили ли вы '' ? – cmannett85

+0

для тех из вас, кто приходит из MSVC, он очень похож на функцию компилятора declspec __property - за исключением того, что он работает с компиляторами ALL C++ вместо – osirisgothra

ответ

3

Мне кажется, что вы не знаете, как использовать Q_PROPERTY. Это пример, основанный на Ваш код на имущество _productid, я не включал ненужные вещи:

class Product: public QObject 
{ 
    Q_OBJECT 
    Q_PROPERTY(QString _productid READ _getProductid WRITE _setProductid) 
public: 

    QString _productid; 
    QString _getProductid() const {return _productid;} 
    void _setProductid(QString product){_productid = product;} 
}; 

Для READ Вы можете установить имя функции, возвращающей значение _productid.

Для WRITE Вы устанавливаете значение значения функции _productid.

Вы все это задали имя своей собственности, а макрос Qt Q_PROPERTY устанавливал их как функции в файле moc_file. Компилятор возвращает ошибки, потому что он не нашел таких функций, как QString Product :: _ productid() или void Product :: _ productid (QString).

Подробная информация о макро Q_PROPERTY и другие примеры: http://developer.qt.nokia.com/doc/qt-4.8/properties.html

+0

, если вы помещаете объявления свойств в другой файл и включаете их, он будет делать moc-дроссель на нем , также убедитесь, что вы очищаете все/перестраиваете все, если вы перемещаете реализацию этих функций из одного модуля в другой (например, один файл .cpp в другой) и избегать использования .inc файлов в заголовках, потому что moc ненавидит что :-) – osirisgothra