none
VisualC++2010のビルドエラー RRS feed

  • 質問

  • VC++2010でC言語ファイルを作成しております。

    デバッグを開始したところ、以下のメッセージが出て実行できません。

    fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

    どなたか解決策をわかる方はおられないでしょうか?

    2013年5月3日 2:24

回答

  • 'シンボル'とは、名前の付いたなにか(モノ)を指します。

    具体的には、関数「名」や変数「名」です。

    C言語では、名前のつけられるすべてのモノに、スコープという可視範囲が存在します。

    LNK1160エラーは、あるモノの持つスコープ上に、同じ名前を持つ別のモノが存在したとき、どっちを利用すればいいかが判断できないため、エラーとなってビルド(リンク)に失敗します。

    何が重複しているのかはわかりませんが(書いていませんからね)、それを重複しないようにすることで解決します。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    2013年5月3日 4:50
  • enshu1.cpp と enshu2.cpp の両方に main 関数がありませんか?

    main 関数(プログラムの最初に実行されるユーザーコード)は、1プロジェクトに1つだけしか記述できません。

    enshu2.cpp をenshu1.cpp で使っていたプロジェクトに追加するのではなく、新規にプロジェクトを作成し、そこにenshu1.cpp を用意したときのように enshu2.cpp を用意すればうまくいくのではないかな?と思います。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    2013年5月3日 6:22

すべての返信

  • 'シンボル'とは、名前の付いたなにか(モノ)を指します。

    具体的には、関数「名」や変数「名」です。

    C言語では、名前のつけられるすべてのモノに、スコープという可視範囲が存在します。

    LNK1160エラーは、あるモノの持つスコープ上に、同じ名前を持つ別のモノが存在したとき、どっちを利用すればいいかが判断できないため、エラーとなってビルド(リンク)に失敗します。

    何が重複しているのかはわかりませんが(書いていませんからね)、それを重複しないようにすることで解決します。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    2013年5月3日 4:50
  • 返信ありがとうございます。

    先程再びプログラム全体と出力先のエラーメッセージを見直したのですが、どこがおかしいかよくわからないです。

    先ほどのエラーメッセージの前に、以下のようなことが書いてあったので、重複の原因がenshu2.objにあるのかと思ったのですが、関係あるのでしょうか?

    試しにゴミ箱に削除してデバッグを開始してみても、デバッグ開始した時にまた複製されて消去できないのですが。

    1>------ すべてのリビルド開始: プロジェクト: 物理学情報処理2, 構成: Debug Win32 ------
    1>  enshu1.cpp
    1>  enshu2.cpp
    1>  コードを生成中...
    1>enshu1.obj : error LNK2005: _main は既に enshu2.obj で定義されています。
    1>C:\Users\ryoichi\Documents\Visual Studio 2010\Projects\Helo\Debug\物理学情報処理2.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

    2013年5月3日 6:11
  • enshu1.cpp と enshu2.cpp の両方に main 関数がありませんか?

    main 関数(プログラムの最初に実行されるユーザーコード)は、1プロジェクトに1つだけしか記述できません。

    enshu2.cpp をenshu1.cpp で使っていたプロジェクトに追加するのではなく、新規にプロジェクトを作成し、そこにenshu1.cpp を用意したときのように enshu2.cpp を用意すればうまくいくのではないかな?と思います。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    2013年5月3日 6:22
  • ありがとうございます。解決しました。

    おっしゃるとおり、enshu1.cppとenshu2.cpp両方にmain関数を使っていました。

    enshu2.cppのファイルを別の新規のプロジェクトに追加し、デバッグを開始したところ実行できました。

    2013年5月3日 10:52