multiple definition of metaObject()の対処法

QTでシグナルスロットを使ったプログラムを書く場合によくあるエラーとしてシグナル関数の2重定義があります。

例えば次のようにQWidgetを拡張して何かウィジェットクラスを作る場合を考えます。

class MyWidget : public QWidget
{
public:
	explicit QWidget(QWidget * parent = 0);
	
signals:
	void widgetClicked();
}

よくある間違いが、このシグナル関数をソースファイルで定義してしまうことです。

MyWidget::MyWidget(QWidget * parent)
: QWidget(parent)
{

}

/**エラー! : シグナル関数の2重定義*/
void MyWidget::widgetClicked()
{}

シグナルはqmake時に自動的に定義されるのでこの宣言は必要ありません。宣言すると次のような"multiple definition"エラーが出ます。

multiple definition of `MyWidget::widgetClicked() const'
first defined here
...

もしこのようなエラーが出た時はシグナル関数を2重定義していないか確認してみると良さそうです。

関連項目
プライバシーポリシー