Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
orange_fox
34 / 34 / 8
Регистрация: 06.04.2014
Сообщений: 189
1

LNK2019: unresolved external symbol

22.08.2014, 15:49. Просмотров 1629. Ответов 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
Ответы с готовыми решениями:

Error: mainwindow.obj:-1: ошибка: LNK2019: unresolved external symbol
При сборке проекта возникает ошибка mainwindow.obj:-1: ошибка: LNK2019:...

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

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

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

unresolved external
#include &lt;Windows.h&gt; int main() {...

9
Elboy
131 / 112 / 11
Регистрация: 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 / 8
Регистрация: 06.04.2014
Сообщений: 189
23.08.2014, 20:38  [ТС] 3
Elboy, а зачем динамически объект создавать?
0
Eumi
5 / 5 / 1
Регистрация: 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
Эксперт С++
1925 / 1037 / 109
Регистрация: 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
19229 / 12354 / 2607
Регистрация: 24.12.2010
Сообщений: 25,428
25.02.2015, 12:26 6
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
не уверен, нужно/можно ли явно указывать тип класса при инициализации переменной, попробуйте убрать Counter:: отсюда:
Да, эта конструкция кажется несколько странной...
0
Eumi
5 / 5 / 1
Регистрация: 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
19229 / 12354 / 2607
Регистрация: 24.12.2010
Сообщений: 25,428
25.02.2015, 12:36 8
qmake делали?
файл moc_counter.cpp в папке присутствует?
3
Eumi
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
25.02.2015, 17:52 9
При запуске qmake работает.

А просто для самообразования, в чем разница сборкой и qmake?
и что это за файл moc_counter.cpp? я просто только изучаю Qt и с таким впервые сталкиваюсь.
0
Байт
Эксперт C
19229 / 12354 / 2607
Регистрация: 24.12.2010
Сообщений: 25,428
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

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

Ошибка при подключении плагина QPSQL "Symbol lookup error undefined symbol pqstatus"
Подскажите пожалуйста. Подключила драйвер PSQL, но при попытке выполнить код ...

Ошибка LNK2019
Возникла ошибка &quot;ссылка на неразрешенный внешний символ&quot; после того, как вынес...


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

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

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