给所有.hpp
都加了保护机制,但仍然显示多次定义。
#ifndef UI_MAINWINDOW_HPP
#define UI_MAINWINDOW_HPP
#include <QtCore/QString>
#include <QtCore/QSize>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMessageBox>
#include <QtGui/QAction>
#include <QtGui/QCloseEvent>
namespace dm::ui{
class MainWindow : protected QMainWindow {
Q_OBJECT
public:
// ...
MainWindow();
~MainWindow();
void closeEvent(QCloseEvent *event);
inline void show();
protected:
// ...
};
MainWindow::MainWindow() {
// ...
}
MainWindow::~MainWindow() {
// ...
}
void MainWindow::closeEvent(QCloseEvent *event) {
// ...
}
inline void MainWindow::show() {
this->QMainWindow::show();
}
}
#endif // UI_MAINWINDOW_HPP
... error: multiple definition of `dm::ui::MainWindow::MainWindow()'; debug/main.o:... first defined here
有n条这样的报错……
难道必须把实现放在.cpp
里吗?这并不优雅。
解决这些报错。
不优雅可还行,标准就是声明放头文件,定义放cpp
头文件被cpp包含后,在预处理阶段会展开,你在多个cpp中有同一份定义,链接的时候当然出现重定义
所以都是声明放头文件,由其他cpp引用声明,定义就只有一个cpp,链接才不会出错
实现放在.cpp里才是标准操作吧,头文件多次引用,.h文件保护一次就行了