Форум программистов, компьютерный форум, киберфорум
Наши страницы

Qt

Войти
Регистрация
Восстановить пароль
 
orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
#1

LNK2019: unresolved external symbol - C++ Qt

22.08.2014, 15:49. Просмотров 1478. Ответов 9
Метки нет (Все метки)

Ошибка:
C++ (Qt)
1
LNK2019: unresolved external symbol "public: __cdecl Counter::Counter(void)" (??0Counter@@QEAA@XZ) referenced in function main
main.cpp
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <QApplication>
#include <QLabel>
#include <QPushButton>
 
#include "counter.h"
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
 
    QLabel counterLabel("0");
    QPushButton incCounterButton("INCREMENT");
 
    counterLabel.show();
    incCounterButton.show();
 
    Counter counter;
 
    QObject::connect(&incCounterButton, SIGNAL(clicked()),
                     &counter, SLOT(slotInc())
                     );
 
    QObject::connect(&counter, SIGNAL(counterChanged()),
                     &counterLabel, SLOT(setNum(int))
                    );
 
    QObject::connect(&counter, SIGNAL(goodBye()),
                     &app, SLOT(quit())
                     );
 
 
    return app.exec();
}



counter.h
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef COUNTER_H
#define COUNTER_H
 
#include <QObject>
 
class Counter : public QObject
{
    Q_OBJECT
public:
    Counter();
 
signals:
    void counterChanged(int);
    void goodBye();
 
public slots:
    void slotInc();
 
private:
    int counter;
 
};
 
#endif // COUNTER_H



counter.cpp
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "counter.h"
 
Counter::Counter() :
    QObject(), Counter::counter(0)
{
}
 
void Counter::slotInc()
{
    emit counterChanged(++Counter::counter);
 
    if(Counter::counter == 5)
        emit goodBye();
}


.pro
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#-------------------------------------------------
#
# Project created by QtCreator 2014-08-22T13:26:42
#
#-------------------------------------------------
 
QT       += core gui
 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
TARGET = empty_try_widget
TEMPLATE = app
 
 
SOURCES += main.cpp\
    counter.cpp
 
HEADERS  += \
    counter.h
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2014, 15:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос LNK2019: unresolved external symbol (C++ Qt):

Error: mainwindow.obj:-1: ошибка: LNK2019: unresolved external symbol - C++ Qt
При сборке проекта возникает ошибка mainwindow.obj:-1: ошибка: LNK2019: unresolved external symbol &quot;public: __thiscall DialogHelp::...

Qt 4.8.2 + MSVS 2010 (add-in) - unresolved external symbol LNK2001, LNK2019 - C++ Qt
Проект был написан на Qt 4.7.3 + VS 2010. После обновления Qt и переустановки VS + add-in на стадии линковки появляются ошибки LNK2001,...

Ошибка "LNK2019: unresolved external symbol." - C++ Qt
Пытался реализовать переключение между двумя окнами в Qt, но при сборке проекта вылетает набор ошибок: 1. mainwindow.obj:-1: error:...

Ошибка компиляции: error: LNK2001: unresolved external symbol - C++ Qt
Здравствуйте, только начал изучать Qt. Сразу же столкнулся с такой проблемой: про создании класса и обьявлении экземпляра класса с со...

unresolved external - C++ Qt
#include &lt;Windows.h&gt; int main() { MessageBoxA(0,(LPCSTR)&quot;ttt&quot;,(LPCSTR)&quot;ttt&quot;,MB_OK); return 0; } main.obj:-1: ошибка:...

Глюк при создание объекта очередного класса? Unresolved external - C++ Qt
Помню я раньше помог кому - то эту проблему решить удалением obj файлов и пересборкой...но лично мне это не помогает :) Вот добавил...

9
Elboy
131 / 112 / 4
Регистрация: 01.09.2012
Сообщений: 288
22.08.2014, 17:17 #2
Цитата Сообщение от orange_fox Посмотреть сообщение
Counter counter;
C++ (Qt)
1
Counter *counter = new Counter;
0
orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
23.08.2014, 20:38  [ТС] #3
Elboy, а зачем динамически объект создавать?
0
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 60
25.02.2015, 11:56 #4
Хм, а проблему так и не решили?
У меня та же проблема, единственное отличие от проекта выше, то что у меня прописано в файл main.cpp вместо:

C++ (Qt)
1
2
3
#include <QApplication>
#include <QLabel>
#include <QPushButton>
только одна строчка

C++ (Qt)
1
#include <QtWidgets>
не знаю уж, хорошо это или плохо.

И в файл проекта .pro добавила строчку:

C++ (Qt)
1
QT       += widgets
А так, ошибка та же. И тоже не понимаю почему посоветовали использовать динамический объект.
0
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
25.02.2015, 12:19 #5
Цитата Сообщение от orange_fox Посмотреть сообщение
Counter::counter(0)
не уверен, нужно/можно ли явно указывать тип класса при инициализации переменной, попробуйте убрать Counter:: отсюда:
Цитата Сообщение от orange_fox Посмотреть сообщение
Counter::Counter() : QObject(), Counter::counter(0) { }
Добавлено через 52 секунды
будет:
C++ (Qt)
1
Counter::Counter() : QObject(), counter(0) { }
0
Байт
Эксперт C
17714 / 11735 / 1871
Регистрация: 24.12.2010
Сообщений: 23,531
25.02.2015, 12:26 #6
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
не уверен, нужно/можно ли явно указывать тип класса при инициализации переменной, попробуйте убрать Counter:: отсюда:
Да, эта конструкция кажется несколько странной...
0
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 60
25.02.2015, 12:31 #7
Ну, у меня отличается чуть чуть, но смысл тот же поэтому не стала заострять внимание:

Counter.cpp
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "Counter.h"
 
Counter::Counter(): QObject()
                  , m_nValue(0)
 
{
}
void Counter::slotInc()
{
    emit counterChanged(++m_nValue);//высылает сигнал
 
    if (m_nValue == 5) {
        emit goodbye();
    }
}


Counter.h
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef COUNTER_H
#define COUNTER_H
 
#include <QObject>
 
class Counter : public QObject {
    Q_OBJECT
private:
    int m_nValue;
 
public:
    Counter();
 
public slots:
    void slotInc();
 
signals:
    void goodbye ();
    void counterChanged(int);
 
};
 
#endif // COUNTER_H
0
Байт
Эксперт C
17714 / 11735 / 1871
Регистрация: 24.12.2010
Сообщений: 23,531
25.02.2015, 12:36 #8
qmake делали?
файл moc_counter.cpp в папке присутствует?
3
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 60
25.02.2015, 17:52 #9
При запуске qmake работает.

А просто для самообразования, в чем разница сборкой и qmake?
и что это за файл moc_counter.cpp? я просто только изучаю Qt и с таким впервые сталкиваюсь.
0
Байт
Эксперт C
17714 / 11735 / 1871
Регистрация: 24.12.2010
Сообщений: 23,531
25.02.2015, 18:17 #10
Цитата Сообщение от Eumi Посмотреть сообщение
А просто для самообразования, в чем разница сборкой и qmake?
и что это за файл moc_counter.cpp? я просто только изучаю Qt и с таким впервые сталкиваюсь.
qmake анализирует файл .pro и генерирует файл makefile. Когда он встречает HEADER += он (если в этом хедере есть макрос QObject) генерирует вызов претранслятора moc. Таким образом в makefile генерируется последовательность команд, осуществляющих сборку. Сборка - это выполнение команд из makefile (если нужно). Эти команды создают moc_counter.cpp. В нем содержится код, обрабатывающий сигналы и слоты. (Кстати, посмотри на него, это интересно). Потом на основании cpp-файлов (трансляция!) создаются объектные .o-файлы, а из последних линковщик (именно он обнаружил у тебя ошибку) создает exe.
Кратко - вот так.
Необходимо понимать, что файлы .o, moc_..cpp и некоторые другие - временные, промежуточные. Их можно удалять, они все равно создадуться при сборке.
При работе без Креатора, из командной строки, необходимо делать 2 команды: qmake (при изменении файла .pro)
и make. Именно это и делает QtCreator. Лично я предпочитаю эти две команды давать самостоятельно.
3
25.02.2015, 18:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2015, 18:17
Привет! Вот еще темы с ответами:

Ошибка при подключении плагина QPSQL "Symbol lookup error undefined symbol pqstatus" - C++ Qt
Подскажите пожалуйста. Подключила драйвер PSQL, но при попытке выполнить код QSqlDatabase db = QSqlDatabase::addDatabase(&quot;QPYSQL&quot;);...

Ошибка LNK2019 - C++ Qt
Возникла ошибка &quot;ссылка на неразрешенный внешний символ&quot; после того, как вынес класс в отдельные файлы. main.cpp #include...

[QT5] ошибка LNK2019 - C++ Qt
В общем, создал проект, плюхнул на него кнопку, на слот нажатия кнопки пишу std::vector&lt;Proc_Info&gt; proclist; GetProcList(proclist); ...

QSslSocket: cannot call unresolved function - C++ Qt
Объясните мне, как работают данные строки. То есть я понимаю принцип СИГНАЛ-СЛОТ. Но не могу понять вот чего: допустим я нажимаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru