Program do nauki słówek POMOC
Unsolved
Polish
-
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)
-
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>
wslowa.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) { }
-
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());