カスタム型のいくつかの static/const オブジェクトを定義しようとしているクラスがあります。ヘッダー ファイルは、おおよそ次のようになります。
#ifndef SRC_TEMPCONT_HXX
#define SRC_TEMPCONT_HXX
class TC
{
public:
// ... misc stuff ...
class Register
{
public:
//... misc stuff ...
enum Access { Read=0x1, Write=0x2, ReadWrite=0x3 };
//constructor
Register(uint16_t address, Access access, size_t size);
//series of static variables
static Register
Setpoint1, SetpointSafetyCheck, Temperature,
SecurityByte, RampByte, DisplayByte, DisplayState, Model,
CommAddress, CommBaud, CommDataType, CommDebug,
ProgramRun,
Input, Unit,
SoftwareVersion,
MaxProgram, Program;
};
};
#endif //TEMPCONT_HXX
cxx ファイルでは、次のように変数をインスタンス化します。
TC::Register TC::Register::Setpoint1 (0x007F, ReadWrite, 2);
TC::Register TC::Register::SetpointSafetyCheck (0x0125, ReadWrite, 1);
TC::Register TC::Register::Temperature (0x001C, Read, 2);
//etc...
私のメイクファイルは、正しいと思われる次のコマンドでコンパイルされます。
g++ -g -Wall -DOS_LINUX -g -lm -lz -lutil -lnsl -lpthread -lrt -Isrc -I/home/deap/ovendaq/midas/include -I/home/deap/ovendaq/midas/drivers/divers src/obj/cont_test.o src/obj/TempCont.o src/obj/TimeoutSerial.o -L/home/deap/ovendaq/midas/linux-m64/lib -lmidas -lboost_system -lboost_program_options -o bin/cont_test.exe
しかし、変数ごとにこの奇妙なエラーが発生しています。
src/obj/TempCont.o:/usr/include/boost/noncopyable.hpp:24: multiple definition of `TC::Register::Setpoint1'
src/obj/cont_test.o:/home/deap/dev/OvenProject/src/cont_test.cxx:14: first defined here
src/obj/TempCont.o:/usr/include/boost/system/error_code.hpp:350: multiple definition of `TC::Register::SetpointSafetyCheck'
src/obj/cont_test.o:/home/deap/dev/OvenProject/src/cont_test.cxx:16: first defined here
src/obj/TempCont.o:/usr/include/boost/exception/exception.hpp:344: multiple definition of `TC::Register::Temperature'
src/obj/cont_test.o:/home/deap/dev/OvenProject/src/cont_test.cxx:18: first defined here
//etc...
ブースト ライブラリ内で変数を宣言していると思われるのはなぜですか? 単純化されたプログラムでこれとまったく同じ構造をテストしたところ、適切に機能しましたが、ここで機能しない理由がわかりません。私は何を間違っていますか?
ティア