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

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

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

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

Q&A

解決済

1回答

8063閲覧

C++でヘッダファイルのinclude時にエラー:undefined reference to ~

PossiblyApple

総合スコア17

C++

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

0グッド

0クリップ

投稿2019/05/18 01:01

編集2019/05/18 01:05

現状

C++でヘッダファイル(.h)をインクルードしたいのですが上手くいきません。

環境・バージョン

Microsoft Visual C++:2005, 2008, 2010, 2012, 2013, 2017(使用しているバージョンはわからない)
Visual Studio Code: 1.25.1(これを入力したエディタ)
g++: 6.3.0

コード

いずれも同フォルダにあります。
main.cpp

C++

1#include "fo.h" 2int main(){ 3 int a = foo(); 4}

fo.cpp

C++

1#include "fo.h" 2int foo(){return 100;}

fo.h

C++

1#pragma once 2int foo();

これらを、g++ main.cpp -o main && mainで実行すると、以下のコンパイルエラーが出ます。

C++

1C:\Users\(ユーザ名)\AppData\Local\Temp\ccESwyzU.o:main.cpp:(.text+0xf): undefined reference to `foo()' 2collect2.exe: error: ld returned 1 exit status

g++のオプションでインクルードパスを設定することができるようですが上手くいきませんでした。
かつヘッダファイルは同一フォルダにあるので関係ないかと考えられます。

main.cppでソースコードを直接インクルードする(#include "fo.h"#include "fo.cpp" にする)と、エラーは出なくなりますが、ヘッダファイルを利用した方がC++の仕様上良いと思うので、ヘッダファイルを利用したいです。
どなたかご教授お願いします。

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

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

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

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

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

cateye

2019/05/18 01:10 編集

回答に移動
guest

回答1

0

ベストアンサー

g++ main.cpp -o main && main ・・・fo.cppをコンパイルしてないのでは?


g++ main.cpp fo.cpp -o main
・・

text

1sr ~/Project/test % ls 2a.out* fo.cpp fo.h main.cpp t1.c teratail/ 数独/ 3usr ~/Project/test % g++ main.cpp fo.cpp -o main 4main.cpp: In function ‘int main()’: 5main.cpp:3:9: warning: unused variable ‘a’ [-Wunused-variable] 6 int a = foo(); 7 ^ 8usr ~/Project/test % ls 9a.out* fo.cpp fo.h main* main.cpp t1.c teratail/ 数独/

投稿2019/05/18 01:10

編集2019/05/18 01:14
cateye

総合スコア6851

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

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

cateye

2019/05/18 01:25 編集

ヘッダファイルのせいじゃないです、“ld returned 1 exit status”はリンカがfoo()を見つけられなかったと言ってるd^^ warning: unused variable ‘a’はaが使われていないと言うワーニングです。 ちゃんと実行ファイル(main)出来ますよd^^
PossiblyApple

2019/05/18 01:32

コンパイルの引数って複数入れられるんですね。単純なミスでした。 試しにこちらでも実行してみたところうまく動きました。 ご回答ありがとうございました。
cateye

2019/05/18 01:51

ディレクトリに必要なファイル以外がない状態ならg++ -o main *.cppでもOKです。
episteme

2019/05/18 07:02

個別にコンパイル/リンクしてもいいのよ。 g++ -c main.cpp (main.cppをコンパイル) g++ -c fo.cpp (fo.cppをコンパイル) g++ -o main main.o fo.o (main.o と fo.o をリンク)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問