-2 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 12
1

Очередная ошибка LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl ClassName::ClassName(void)"

01.03.2019, 07:46. Показов 7757. Ответов 2

Всем привет, по форуму нашёл очень много таких тем, но ни одна конкретно в моём случае не помогла, буду рад любому совету.

У меня есть пустой класс CTestFigure, в котором есть только конструктор по умолчанию, и деструктор.

ctestfigure.h
C++
1
2
3
4
5
6
7
8
9
10
11
#ifndef CTESTFIGURE_H
#define CTESTFIGURE_H
 
class CTestFigure
{
public:
    CTestFigure();
    ~CTestFigure();
};
 
#endif // CTESTFIGURE_H
ctestfigure.cpp
C++
1
2
3
4
5
6
7
8
9
#include "ctestfigure.h"
 
CTestFigure::CTestFigure()
{
}
 
CTestFigure::~CTestFigure()
{
}
После строчки, где я объявляю указатель, и инициализирую его с помощью new, вылетает ошибка:
"main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl CTestFigure::CTestFigure(void)" (??0CTestFigure@@QEAA@XZ) в функции main"

Вот строка инициализации:
C++
1
CTestFigure* testFig = new CTestFigure();
Почитав темы, связанные с этой ошибкой, я понял, что ошибка эта чаще всего вылетает, когда компилятор не видит вызываемого конструктора, но он объявлен, является публичным.
Голова кипит уже, не могу даже представить себе из-за чего он решил покапризничать.

На всякий случай,
Работаю в IDE: QT Creator (4.5.1)
Qt version: 5.10.1
Строка Qmake: qmake.exe TestGraph.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2019, 07:46
Ответы с готовыми решениями:

Ошибка : LNK2019 ссылка на неразрешенный внешний символ "public: void_thiscall person::show_data(void)"
Доброго времени суток. Помогите пожалуйста с программой, я недавно начал осваивать с++ и подобная...

В чем ошибка? error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Point::Point(void)" (?0Point@@Q
#ifndef FIGURE_H #define FIGURE_H class Figure{ public: virtual double Square() = 0; virtual...

Ошибка LNK2019 ссылка на неразрешенный внешний символ _main в функции "int __cdecl invoke_main(void)"
В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов...

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt;...

2
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
01.03.2019, 08:45 2
ctestfigure.cpp не добавлен в проект
1
-2 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 12
01.03.2019, 09:38  [ТС] 3
Самое интересное, что файлы все подключены.
Пути до всех .cpp .h .ui в Qt указываются в .pro файле, вот содержимое .pro файла
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
SOURCES += \
        main.cpp \
        mainwindow.cpp \
    ctestfigure.cpp
 
HEADERS += \
        mainwindow.h \
    ctestfigure.h
 
FORMS += \
        mainwindow.ui
Добавлено через 29 минут
В итоге сам решил, странное поведение, был бы рад узнать почему это так, если кто-то знает.

Решение:
После добавления новых .cpp и .h файлов в проект, они автоматически добавляются в .pro файл, но компилятор при сборке не видит .cpp. Чтоб компилятор их увидел, достаточно в qt creator открыть меню "Сборка"->"Запустить QMake".

Добавлено через 7 минут
Нашёл сам из-за чего себя так ведёт qt.
Когда мы выполняем простую сборку, он сразу берёт информацию о подключенных файлах из Makefile.Debug/Release файлов, а саму команду qmake не выполняет.
А файлы эти должны генерироваться из файла .pro с помощью qmake.

Отсюда вытекает следующее, после добавления новых файлов нужно обязательно либо запускать QMake, либо полностью пересобирать проект (при пересборке qmake выполняется).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2019, 09:38
Помогаю со студенческими работами здесь

Ошибка линкера: ссылка на неразрешенный внешний символ "public: int __thiscall stack<int>::pop(void)"
Всем привет! Возникает ошибка: error LNK2019: ссылка на неразрешенный внешний символ &quot;public: int...

LNK2019: ссылка на неразрешенный внешний символ "void __cdecl run(void)" (?run@@YAXXZ) в функции _wmain
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;cmath&quot; using namespace std; class A {...

error LNK2019: ссылка на неразрешенный внешний символ "public: int __thiscall KDocument::Open(char const *)" в функции _WinMain@16
ребята, при компиляции линковщик ругается, подскажите пожалуйста , вроде бы и Kdocument.h...

"Ошибка LNK2019 Ссылка на неразрешенный внешний символ"
Знаю что очередное повторение одной и той же ошибки, но везде пишут про то, что функции не...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru