質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

7380閲覧

c++ ソースファイルとインクルードすると原因のわからないエラーでる

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/04/25 11:36

編集2019/04/25 11:45

初心者なのですがヘッダーではなくソースファイルをインクルードしてみたのですが原因のわからないエラー出てしまい困っています。
そもそもソースファイルをインクルードすること自体悪いのではと思っています。
原因を教えてくれますでしょうか?

1エラー LNK2005 "void __cdecl test(void)" (?test@@YAXXZ) は既に Main.obj で定義されています。
2エラー LNK1169 1 つ以上の複数回定義されているシンボルが見つかりました

#include <iostream> #include "conio.h" //#include "Header.h" #include "Source2.cpp" using namespace std; int main() { test(); // cout << eint; //source_f(); //cout << eint; int _r = _getch(); return 0; }
#ifndef source2___ #define source2___ #include <iostream> void test() { std::cout << "テスト"; } #endif

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/04/25 11:44 編集

〉原因のわからないエラー出てしまい・・・エラーメッセージを貼って下さい。 あと、環境(OS,コンパイラなど)はなんですか?
guest

回答3

0

ベストアンサー

ソースファイルをインクルードしてみた

なぜ。。。

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

C/C++のincludeは自動コピペ機能です。
ですので、main関数のあるファイルとSource2.cppの両方にtest関数の実体があることになります。

対策
どちらでも対処できます...が、前者を選ぶ理由は無いでしょう。

  • Source2.cppをコンパイル対象から外す
  • おとなしくヘッダファイルを使う

投稿2019/04/25 11:58

編集2019/04/25 12:01
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/04/25 12:12

あ!なるほど・・・コンパイル対象とincludeと2個あるってことですね? 配列とか構造体の初期化データは別にすることがありますが、拡張子変えてますね。・・・c++ *.cppでコンパイルできるしw
退会済みユーザー

退会済みユーザー

2019/04/25 12:32

そもそもやってはダメな行為ということいいのでしょうか?
LouiS0616

2019/04/25 12:34

@_Beginner__ さん 絶対ダメというわけでは無いですが、普通は想定されないものですし、そもそもメリットがありません。
退会済みユーザー

退会済みユーザー

2019/04/25 13:56

ではエラーにならないための方法を教えてくれますでしょうか? 気になってしまっているので。
LouiS0616

2019/04/25 14:01

void test(); と書いたヘッダファイルを用意して(インクルードガードもお忘れなく)、二つのcppファイルそれぞれからインクルードすれば良いです。
guest

0

ソースコードに相いれない定義を複数書いても、includeしたことで相いれない定義が並んだとしても、ダメなのは同じです。

includeしたものも含めて、全部を集め、その中で重複しているものを見つけましょう。

重複している定義を削っていって、重複がなくなれば、重複定義のエラーは自然と解消されます。

===

投稿2019/04/25 11:57

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

同じプロジェクトで以前に何か作りましたか?・・・以前のデータが有ると新しいプロジェクトに影響が出ます。新しくプロジェクトを起こして下さい。・・・たぶん治る
あと、プリコンパイルヘッダは使わないほうがいいです。

投稿2019/04/25 11:50

編集2019/04/25 11:54
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/04/25 12:03

WindwsやVSには疎いです、間違ったことを言っていたらご容赦下さい。
退会済みユーザー

退会済みユーザー

2019/04/25 12:21

いえ、何も作成していません。初心者なのでエディタの設定は特にいじるほどの知識がいので触ってないのですがなぜでしょうか?一応プロジェクトを作り直しましたが同じエラーになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問