3

カスタム型のいくつかの 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... 

ブースト ライブラリ内で変数を宣言していると思われるのはなぜですか? 単純化されたプログラムでこれとまったく同じ構造をテストしたところ、適切に機能しましたが、ここで機能しない理由がわかりません。私は何を間違っていますか?

ティア

4

0 に答える 0