问题关键出现在头文件中,出现了定义冲突
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#endif // MAINWINDOW_H
每个头文件的开始和结束除会引用如下预处理器变量,而且该变量在程序中是唯一的,主要用来避免多重包含,可是如果你的预处理器变量名重复了 就会发生一些我们不希望的事情。像下面这种情况:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
class mainwindow{
public:
};
#endif // MAINWINDOW_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
class first{
public:
};
#endif // MAINWINDOW_H
两个类 mainwindow和first,使用了一样的预处理器变量,再引用这两个类的cpp文件中,就认为你重复包含而忽略其中一个头文件。
最容易被忽略的操作导致该问题:
给类重命名,此时类名变了,但是预处理变量没有改变,这就为变量重复埋下隐患