none
error RC2151: cannot reuse string constants, 378(0x17A) - "Initial setting" already defined. の解消法

    質問

  • VisualStudio2010 を使っています。

    .rc ファイルのSTRINGTABLEを手修正で追加しているのですが、タイトルのエラーが出て困っています。

    同じ文字列を使っているという内容なのですが、 "File" を使うと出て、 "Edit" やその他の文字はは出ません。

    ("File " とスペースを入れても上記エラーは解消されません)

    ID名をわかりやすくするために別ID名に同じ文字列を設定したい場合があるのですが、上記のエラーを解消する方法はありますでしょうか?

    2017年4月19日 14:20

回答

  • 「エラーRC2151:文字列定数は再利用できません、378(0x17A)-"Initial setting"は既に定義されています」
    ということですね。

    つまり、以下の様な状態であると推定できます。

    --------Resource.h----------------
      :
    #define IDS_AAA 378  // 最初の定義
    #define IDS_BBB 378  // コピーして識別子は変えたけど数値は変えなかった・・・のかも
      :
    
    --------*.rc------------------
      :
    // 別のIDに 同じ文字列を登録してみる実験
    STRINGTABLE
    BEGIN
        IDS_AAA  "Initial setting"	
        IDS_BBB  "Initial setting"		
    END
      :

    IDS_BBB 側に設定してある数値はIDS_AAAと違う値にしなければならないわけですね。

    2017年4月20日 2:27

すべての返信

  • その ID の実際の数値、String Table 内で「値」という列で表示される数値が同じになっている時に出るエラーです。
    String Table 内で重複していないかを確認してみてください。
    (エラーが示しているように、378 番として Initial setting がどこかで定義されていて、今回追加した文言がなぜか同じ 378 番になっている)
    2017年4月19日 21:35
    モデレータ
  • 「エラーRC2151:文字列定数は再利用できません、378(0x17A)-"Initial setting"は既に定義されています」
    ということですね。

    つまり、以下の様な状態であると推定できます。

    --------Resource.h----------------
      :
    #define IDS_AAA 378  // 最初の定義
    #define IDS_BBB 378  // コピーして識別子は変えたけど数値は変えなかった・・・のかも
      :
    
    --------*.rc------------------
      :
    // 別のIDに 同じ文字列を登録してみる実験
    STRINGTABLE
    BEGIN
        IDS_AAA  "Initial setting"	
        IDS_BBB  "Initial setting"		
    END
      :

    IDS_BBB 側に設定してある数値はIDS_AAAと違う値にしなければならないわけですね。

    2017年4月20日 2:27
  • 「エラーRC2151:文字列定数は再利用できません、378(0x17A)-"Initial setting"は既に定義されています」
    ということですね。

    つまり、以下の様な状態であると推定できます。

    --------Resource.h----------------
      :
    #define IDS_AAA 378  // 最初の定義
    #define IDS_BBB 378  // コピーして識別子は変えたけど数値は変えなかった・・・のかも
      :
    
    --------*.rc------------------
      :
    // 別のIDに 同じ文字列を登録してみる実験
    STRINGTABLE
    BEGIN
        IDS_AAA  "Initial setting"	
        IDS_BBB  "Initial setting"		
    END
      :

    IDS_BBB 側に設定してある数値はIDS_AAAと違う値にしなければならないわけですね。

    ご回答ありがとうございました。

    IDの数値は違っているので、 原因は判らないですね。

    とりあえずエラーになったIDだけリソースエディタで入力してこの問題を回避する事にしました。

    2017年4月20日 23:33
  • 「エラーRC2151:文字列定数は再利用できません、378(0x17A)-"Initial setting"は既に定義されています」
    ということですね。

    つまり、以下の様な状態であると推定できます。

    --------Resource.h----------------
      :
    #define IDS_AAA 378  // 最初の定義
    #define IDS_BBB 378  // コピーして識別子は変えたけど数値は変えなかった・・・のかも
      :
    
    --------*.rc------------------
      :
    // 別のIDに 同じ文字列を登録してみる実験
    STRINGTABLE
    BEGIN
        IDS_AAA  "Initial setting"	
        IDS_BBB  "Initial setting"		
    END
      :

    IDS_BBB 側に設定してある数値はIDS_AAAと違う値にしなければならないわけですね。

    ご回答ありがとうございました。

    IDの数値は違っているので、 原因は判らないですね。

    とりあえずエラーになったIDだけリソースエディタで入力してこの問題を回避する事にしました。

    文章が間違ってました。

    IDの数値は違っているので  ->  IDの数値は違ってないので  

    2017年4月21日 0:34
  • IDの数値は違ってないので 

    ID の数値は違っていないのですか?

    「別ID名に同じ文字列を設定したい」のであれば、それぞれの文字列には、
    (同じ ID 値ではなく)異なる ID 値が必要なのでは。

    2017年4月21日 2:37