Solved File .obj not found on Windows
-
Hi, I wanted to add some new functions to my program I created with free Qt version using my registered one. I use another Windows computer now and it looks like installation of Qt was OK because I can run demo examples. But for some reason although I can see missing files on debug folder I get errors (23 !)
like this "unresolved external symbol_xxx File not found xxx.obj" I know that I didn't have those errors when I finished the project for 2 years ago! Where can be the problem? I'm not using Qt on Windows on normal case , mostly on Linux, now I have no idea what to do. The function have to be added and delivered to customer 15 August. Any help will be appreciated. -
@Norrbotten Can you provide the whole build log?
-
Also, please delete any .user file in the project folder and re setup the project with the kits.
-
hi, I already did it and nothing happens. I found that the only part of the code with class (C++ class) added to project gives the problem. Project was done on the older version of QT, maybe now is it different way to add classes to the project?
I created a new a new empty project and just added a C++ class (base class QObject with included Q Widget).
And it will not work
.h
#ifndef SOMECLASS_H
#define SOMECLASS_H#include <QObject>
#include <QWidget>class someClass : public QObject
{
Q_OBJECT
public:
explicit someClass(QObject *parent = nullptr);signals:
public slots:
void DoSomething();
};#endif // SOMECLASS_H
.cpp
#include "someclass.h"
#include <QMessageBox>someClass::someClass(QObject *parent) : QObject(parent)
{}
void someClass::DoSomething()
{
QMessageBox msg;
msg.setText("Hi");
msg.exec();}
main
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "someclass.h"
someClass *myClass;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
myClass=new someClass(this);
}MainWindow::~MainWindow()
{
delete ui;
}
Errors:
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl someClass::someClass(class QObject *)" (??0someClass@@QEAA@PEAVQObject@@@Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)debug\TestObjErrors.exe:-1: error: LNK1120: 1 unresolved externals
-
Hi @Norrbotten
You use
explicit
with your someClass contructor which means you have to explicitly castQWidget *
(thethis
inmyClass=new someClass(this);
) toQObject *
inMainWindow::MainWindow
.-Michael.
-
@m.sue I used this way for few years ago . The software working fin (executable I created at that time) no such problems as I have now I had at that time
#ifndef GLWIDGET_H
#define GLWIDGET_H#include <QGLWidget>
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
*explicit GLWidget(QWidget parent = 0);public slots:
void RePaint();
void initializeGL() ;
void paintGL() ;
void resizeGL(int w, int h);protected:
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);};
#endif // GLWIDGET_H
Must probably the syntactic was changed while I didn't use Qt . How otherwise have I declare the class? -
@Norrbotten Can you please post the whole build log?
-
@m.sue explicit only tells the compiler to not to use the constructor for implicit type conversions like:
QObject* obj; someClass sClass = obj; // Without explicit compiler would use someClass(QObject *parent = nullptr) constructor to convert QObject* to someClass, with explicit this line will cause a compiler error
-
Hi, in case some one have the same problem.
I receive help from support.
in .h have to be#include <QtGui/QOpenGLFunctions_1_1>
class bscanclass : public QGLWidget, QOpenGLFunctions_1_1
{
Q_OBJECT
public:
explicit bscanclass(QWidget *parent = 0);call from main:
bscanclass *BscanW; // declarationand then
BscanW=new bscanclass(this);Working perfect now. Thank you very much for trying to help