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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kame

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

#1

投稿記事 by kame » 8年前

初歩的なミスで申し訳ありません。
visual studioにて、以下のコード書いたんですがビルドのところで失敗してしまいました。

コード:

 
#include <stdio.h>

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

box
記事: 2002
登録日時: 13年前

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

#2

投稿記事 by box » 8年前

そういうエラーは出そうもないコードですけどね。
エラーメッセージの全文を貼っていただけますか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#3

投稿記事 by みけCAT » 8年前

独立したプログラムは、別のプロジェクトにしなければいけません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kame

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

#4

投稿記事 by kame » 8年前

返信ありがとうございます。

もう一度試してみたんですが、ビルドはできました
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続行するには何かキーを押してください...」と出てくるんですが、コンパイルすると必ずコマンドプロンプトに「続行するには何かキーを押してください...」と出てくるんでしょうか?

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

kame

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

#5

投稿記事 by kame » 8年前

別のコードで試してみましたが、最初に投稿したコードと同じようにビルドできませんでした。

エラーは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;
}
 

box
記事: 2002
登録日時: 13年前

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

#6

投稿記事 by box » 8年前

kame さんが書きました:別のコードで試してみましたが、最初に投稿したコードと同じようにビルドできませんでした。

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

kame

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

#7

投稿記事 by kame » 8年前

box さんが書きました:
kame さんが書きました:別のコードで試してみましたが、最初に投稿したコードと同じようにビルドできませんでした。

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

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#8

投稿記事 by みけCAT » 8年前

kame さんが書きました:一つのプロジェクト内に複数のソースファイルを登録する方法はあるんでしょうか?
あります。
龍神録プログラミングの館のサンプルコードでも使われています。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kame

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

#9

投稿記事 by kame » 8年前

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

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

かずま

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

#10

投稿記事 by かずま » 8年前

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

kame

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

#11

投稿記事 by kame » 8年前

[/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関数は複数置けないということでしょうか。

box
記事: 2002
登録日時: 13年前

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

#12

投稿記事 by box » 8年前

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

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

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#13

投稿記事 by みけCAT » 8年前

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関数はオーバーロードできないって言われました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

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

#14

投稿記事 by softya(ソフト屋) » 8年前

関数名が重複しなきゃ良いので、その時動かしたいmain以外はmainX1とかに変えてしまう手もありますよ。あちゃーな方法ですけど。
あとグローバル変数とかも名前重複するとNGです。
まぁ、普通はプロジェクト分けるか、プロジェクトを諦めてコマンドラインで手打ちでコンパイルにします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る