Program do nauki słówek POMOC



  • Piszę program do nauki słówek. Chcę wykorzystać bibliotekę STL. Na razie mam dopiero początek, no i pierwsze problemy.

    slowa.h
    
    #ifndef SLOWA_H
    #define SLOWA_H
    
    #include <QMainWindow>
    
    class slowa
    {
    public:    
        explicit slowa(QWidget *parent = 0);
        QString polskie;
        QString obce;
        slowa(QString xpolskie, QString xobce);
        ~slowa();
    
    };
    
    #endif // SLOWA_H
    
    
    mainwindow.h
    
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    #include "slowa.h"
    
    #include <QMainWindow>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H
    
    slowa.cpp
    
    #include "slowa.h"
    
    slowa::slowa(QString xpolskie, QString xobce):
         polskie(xpolskie)
        , obce(xobce)
    
    {
    }
    slowa::~slowa()
    {
    }
    
    
    mainwindow.cpp
    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        QVector <slowa> s;
        QString pl = "polskie";
        QString en = "obce";
        s.push_back(slowa(pl,en));
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    

    Mam problem z błędem

    mainwindow.obj:-1: błąd: LNK2019: unresolved external symbol "public: __cdecl slowa::slowa(class QWidget *)" (??0slowa@@QEAA@PEAVQWidget@@@Z) referenced in function "private: void __cdecl QVector<class slowa>::defaultConstruct(class slowa *,class slowa *)" (?defaultConstruct@?$QVector@Vslowa@@@@AEAAXPEAVslowa@@0@Z)
    

  • Moderators

    W slowa.h masz taki konstruktor:

    explicit slowa(QWidget *parent = 0);
    

    ale nigdzie go nie implementujesz. Z tego co tu widzę to slowa nie będzie widgetem, więc ten konstruktor jest zupełnie zbędny, usuń go. Ten include #include <QMainWindow> w slowa.h też nie jest Ci potrzebny.

    Taka drobna uwaga nie związana z problemem - nie przekazuj stringów przez wartość tylko przez const referencję, jest zdecydowanie wydajniej:

    slowa(const QString& xpolskie, const QString& xobce);
    


  • Zmieniłem to co mówiłeś w slowa.h teraz mam taki błąd

    C:\Qt\5.9\msvc2013_64\include\QtCore\qvector.h:320: błąd: C2512: 'slowa' : no appropriate default constructor available
    

    konstruktor w c++

    slowa::slowa(QString xpolskie, QString xobce):
         polskie(xpolskie)
        , obce(xobce)
    {
    }
    

  • Moderators

    QVector wymaga, aby typ posiadał domyślny konstruktor, czyli możesz albo dodać nowy konstruktor:

    slowa() {}
    

    albo zmienić ten który masz dodając domyślne wartości argumentów:

    slowa(const QString& xpolskie = QString(), const QString& xobce = QString());
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.