1

クラスのヘッダー ファイルにグローバル ブースト信号を含む .h ファイルをインクルードしています。このファイルは、メイン関数のファイルにインクルードされています。リンカーは、シグナルが複数回宣言されていると言います。シグナル宣言は、C/C++ ヘッダー ファイルに典型的な#ifndef,#defineおよびブロックにラップされます (複数の宣言を避けるために使用されます)。#endifgccでEclipseを使用しています。

#ifndef SIG_HEADER
#define SIG_HEADER
#include <boost/signal.hpp>

boost::signal0 <void> signal1;

#endif

私は何を間違っていますか?

4

2 に答える 2

5

コンパイラ エラーではなく、リンカー エラーが発生しています。したがって、ここではプリプロセッサ ディレクティブは役に立ちません。

必要なことは、(ヘッダー ファイルではなく) ソース ファイル内で変数を定義し、ヘッダー ファイルでextern宣言を使用することです。

于 2012-07-08T20:59:14.030 に答える
3

Your linker is correct. Each time you include this header the symbol signal1 gets defined, resulting in a multiple definition error.

To your rescue comes the extern keyword, which will tell the compiler that this is an object that will be accessed by the entire program and requires external linkage. You will then have to give the compiler a definition of the variable somewhere else, like in the cpp file for this header.

This question offers some more information about external linkage.

于 2012-07-08T21:16:51.927 に答える