Упростил код, дабы было легче разобраться с проблемой. Имеется класс, описанный в mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFormLayout>
#include <QLabel>
#include <QLineEdit>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void Menu1();
void NZER_N_B(int &n);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
Функция NZER_N_B(int &n) должна быть реализована в отдельном .cpp файле ее вызов осуществляется в главном файле.
nzer_n_b.cpp:
#include "mainwindow.h"
void MainWindow::NZER_N_B(int &n)
{
n = 1770;
}
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pb1, SIGNAL(clicked(bool)), this, SLOT(Menu1()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::Menu1()
{
int n;
NZER_N_B(n);
}
Но при такой реализации появляются ошибки LNK1120,2001,2019 (ссылка на неразрешенный элемент). Но если написать реализацию этой функции в заголовочном файле и соответственно подключить его. То ошибок нет, но так не правильно, насколько я знаю. Так вот, вопрос как засунуть реализацию кода в cpp и чтобы ошибок не возникало?
Надо понимать, как работает препроцессор. Когда он встречает директиву #include
, он просто заменяет ее на код из указанного файла.
Поэтому, если уж вам очень захотелось реализацию разбить на несколько пару файлов, то вам надо сделать следующее:
nzer_n_b.cpp:
void MainWindow::NZER_N_B(int &n)
{
n = 1770;
}
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pb1, SIGNAL(clicked(bool)), this, SLOT(Menu1()));
}
MainWindow::~MainWindow()
{
delete ui;
}
// Можно и вначале файла, под всеми другими #include
// но тут, просто, для примера
#include "nzer_n_b.cpp"
void MainWindow::Menu1()
{
int n;
NZER_N_B(n);
}
Если все именно так как описано в примере, то проблем возникнуть не должно. Возможно после добавления файла не был вызван qmake для перегенерации Makefile'ов. Тогда нужно вызвать qmake из контектстного меню проекта, и пересобрать проект.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как обратиться к элементам в вызове функции, когда буду проверять, можно ли построить треугольник?
Всем доброго времени суток,отправляю ajax'ом id в таблицу на удаление,беру через инпутВыскакивает функция success,пишет,что все выполненоНО как...
написал код для валидации поля - мобильного телефона, но нашёл проблему, при заполнение например 12345 - работает отличтно, 1234п - выдает ошибку,...