ページ 11

LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月23日(水) 22:22
by kame
初歩的なミスで申し訳ありません。
visual studioにて、以下のコード書いたんですがビルドのところで失敗してしまいました。

コード:

 
#include <stdio.h>

int main()
{
	printf("Hello、World");
	return 0;
}

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月23日(水) 22:39
by box
そういうエラーは出そうもないコードですけどね。
エラーメッセージの全文を貼っていただけますか?

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月23日(水) 22:40
by みけCAT
独立したプログラムは、別のプロジェクトにしなければいけません。

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月23日(水) 22:52
by kame
返信ありがとうございます。

もう一度試してみたんですが、ビルドはできました
1>------ ビルド開始: プロジェクト:ConsoleApplication2, 構成:Debug Win32 ------
1> ConsoleApplication2.vcxproj -> c:\users\yu03k\onedrive\ドキュメント\visual studio 2015\Projects\ConsoleApplication2\Debug\ConsoleApplication2.exe
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========

その後デバックなしで開始してから、コマンドプロンプトで「Hello、World続行するには何かキーを押してください...」と出てくるんですが、コンパイルすると必ずコマンドプロンプトに「続行するには何かキーを押してください...」と出てくるんでしょうか?

すみません、エラー画面を載せたいんですが添付のしかたが分かりません。

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月23日(水) 23:25
by kame
別のコードで試してみましたが、最初に投稿したコードと同じようにビルドできませんでした。

エラーは2つ出ました。

重大度レベル コード 説明 プロジェクト ファイル 行 ソース 抑制状態
エラー LNK1169 1 つ以上の複数回定義されているシンボルが見つかりました。 ConsoleApplication2 c:\users\yu03k\onedrive\ドキュメント\visual studio 2015\Projects\ConsoleApplication2\Debug\ConsoleApplication2.exe 1 ビルド

重大度レベル コード 説明 プロジェクト ファイル 行 ソース 抑制状態
エラー LNK2005 _main は既に Source3.obj で定義されています。 ConsoleApplication2 c:\Users\yu03k\OneDrive\ドキュメント\visual studio 2015\Projects\ConsoleApplication2\ConsoleApplication2\Source.obj 1 ビルド

コード:

#include <stdio.h>

int main(void)
{

	printf("Hello\n");
	printf("world\n");
	return 0;
}
 

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月24日(木) 07:37
by box
kame さんが書きました:別のコードで試してみましたが、最初に投稿したコードと同じようにビルドできませんでした。

エラーは2つ出ました。
1つのプロジェクトに複数のソースファイルを登録していて、そのうち2つ以上のファイルにmain関数を含んでいる、
というようなことはありませんか?

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月24日(木) 12:27
by kame
box さんが書きました:
kame さんが書きました:別のコードで試してみましたが、最初に投稿したコードと同じようにビルドできませんでした。

エラーは2つ出ました。
1つのプロジェクトに複数のソースファイルを登録していて、そのうち2つ以上のファイルにmain関数を含んでいる、
というようなことはありませんか?
boxさん返信ありがとうございます。
一つのプロジェクト内に複数のソースファイルを登録する方法はあるんでしょうか?

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月24日(木) 12:36
by みけCAT
kame さんが書きました:一つのプロジェクト内に複数のソースファイルを登録する方法はあるんでしょうか?
あります。
龍神録プログラミングの館のサンプルコードでも使われています。

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月24日(木) 20:24
by kame
みけCAT さんが書きました:
kame さんが書きました:一つのプロジェクト内に複数のソースファイルを登録する方法はあるんでしょうか?
あります。
龍神録プログラミングの館のサンプルコードでも使われています。
みけCATさん返信ありがとうございます。

もしよろしければ、一つのプロジェクト内に複数のソースファイルを登録する方法を教えて頂けますか?

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月24日(木) 21:23
by かずま
kame さんが書きました:
みけCAT さんが書きました:
kame さんが書きました: もしよろしければ、一つのプロジェクト内に複数のソースファイルを登録する方法を教えて頂けますか?
登録する方法じゃなくて、登録を解除する方法が知りたいのではありませんか?

No.5 のエラーメッセージの意味が分かりませんか?

LNK1169 のほうは、シンボル、すなわち関数名か変数名が複数回定義されているから
実行ファイル ConsoleApplication2.exe が作れませんでした、ということ。

LNK2005 のほうは、main という名前は、Source3.obj で定義されています。
すなわち、Source3.c (または Source3.cpp)で定義されています。
ところが、Source2.obj を Souorce3.obj とリンクしようとしたら、Source2.obj
にも main という名前が定義されていました。ということ。

ConsoleApplication2 というプロジェクトには
Source2.c と Source3.c のファイルが登録されている、ということ。

両方に main があると言っているのです。

Visual Studio を使っているのなら、ソリューションエクスプローラに
プロジェクトが表示されていて、その下にソースファイルが見つかるはずです。
要らないほうのソースプログラムを右クリックして「クリア」してみては?

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月24日(木) 21:56
by kame
[/quote]
登録する方法じゃなくて、登録を解除する方法が知りたいのではありませんか?

No.5 のエラーメッセージの意味が分かりませんか?

LNK1169 のほうは、シンボル、すなわち関数名か変数名が複数回定義されているから
実行ファイル ConsoleApplication2.exe が作れませんでした、ということ。

LNK2005 のほうは、main という名前は、Source3.obj で定義されています。
すなわち、Source3.c (または Source3.cpp)で定義されています。
ところが、Source2.obj を Souorce3.obj とリンクしようとしたら、Source2.obj
にも main という名前が定義されていました。ということ。

ConsoleApplication2 というプロジェクトには
Source2.c と Source3.c のファイルが登録されている、ということ。

両方に main があると言っているのです。

Visual Studio を使っているのなら、ソリューションエクスプローラに
プロジェクトが表示されていて、その下にソースファイルが見つかるはずです。
要らないほうのソースプログラムを右クリックして「クリア」してみては?[/quote]

かずまさん返信ありがとうございます。

基本的に同一のプロジェクトにはmain関数は複数置けないということでしょうか。

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月24日(木) 22:19
by box
kame さんが書きました: 基本的に同一のプロジェクトにはmain関数は複数置けないということでしょうか。
基本的にじゃなくて、コンソールアプリケーション(main関数が基点となるプログラム)を
作成する場合、1つのプロジェクトにmain関数は「絶対に1個だけ」でなければなりません。

1つのプロジェクトにいくつのソースファイルがあってもかまいませんが、それらの中の
「どれか1個だけ」にmain関数が「1個だけ」入っているファイルが必要である、ということです。
main関数は0個でも2個でも3個でもダメです。1個だけ。

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月24日(木) 22:36
by みけCAT
box さんが書きました:基本的にじゃなくて、コンソールアプリケーション(main関数が基点となるプログラム)を
作成する場合、1つのプロジェクトにmain関数は「絶対に1個だけ」でなければなりません。
正確には「グローバルスコープにmain関数はちょうど1個」ですね。

コード:

#include <iostream>

namespace hoge {
	int main(void) {
		std::cout << "hoge::main" << std::endl;
		return 0;
	}
}

int main(void) {
	std::cout << "global main" << std::endl;
	hoge::main();
	return 0;
}
(Visual C++ 2008で動作確認)
オフトピック
グローバルでint型の引数が3個のmain関数も作ったら、main関数はオーバーロードできないって言われました。

Re: LNK1169  1 つ以上の複数回定義されているシンボルが見つかってしまう

Posted: 2015年12月24日(木) 22:49
by softya(ソフト屋)
関数名が重複しなきゃ良いので、その時動かしたいmain以外はmainX1とかに変えてしまう手もありますよ。あちゃーな方法ですけど。
あとグローバル変数とかも名前重複するとNGです。
まぁ、普通はプロジェクト分けるか、プロジェクトを諦めてコマンドラインで手打ちでコンパイルにします。