版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/82780858
源码如下:
main.cpp
#include <QApplication>
#include <QObject>
#include <QTextCodec>
class MyObject:public QObject{
Q_OBJECT
public:
MyObject(QObject *parent=0):QObject(0){}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
return a.exec();
}
当源码是这样的时候,程序是可以运行的,但如果实例化下对象,就有问题了!
源码如下:
#include <QApplication>
#include <QObject>
class MyObject:public QObject{
Q_OBJECT
public:
MyObject(QObject *parent=0):QObject(0){}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyObject *myObject=new MyObject;
return a.exec();
}
报错如下:
造成这样的原因是因为使用了Qt的东西(QObject与Q_OBJECT)而没有翻译成C++认识的源码,也就是moc文件!一般的解决方案是把类放到单独的.h文件,在.cpp文件里面包含下。
原因如下:
.h的内容被插入到.c中,作为.c的内容被编译。.h文件本身不直接参加编译。
.h文件不能单独进行编译,它只能包含在.c/.cpp文件中,或者与其组建一个工程,然后编译.c/.cpp文件。用包含的形式编译的时候,是把.h文件作为.c/.cpp文件的一部分来进行编译。
写过Makefile的朋友应该会知道!
最后源码如下:
myobject.h
#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <QObject>
class MyObject:public QObject{
Q_OBJECT
public:
MyObject(QObject *parent=0):QObject(0){}
};
#endif // MYOBJECT_H
main.cpp
#include <QApplication>
#include "myobject.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyObject *myObject=new MyObject;
return a.exec();
}
可以正常运行,在Debug文件里面可以看到moc文件