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

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

新規登録して質問してみよう
ただいま回答率
85.37%
makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

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

Q&A

解決済

1回答

1511閲覧

C++のMakefileを使った分割コンパイルについて

German_p0tat0

総合スコア26

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

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

0グッド

0クリップ

投稿2021/07/10 15:39

c++で作ったプログラムを分割しようと思っています.
プログラム自体は動くのですが分割の段階で詰まっています.
![イメージ説明]
上のプログラムをmain,func1,func2,setupに分けようと考えています.

[main]
イメージ説明

[func1]
イメージ説明

[func2]
![イメージ説明]

[setup]
イメージ説明

ヘッダーファイルはそれぞれ以下の通りです

//func1.h void print_itemNum(); void decrease_item(int type); void spawn_block(int m_x, int m_y, bool turn); int set_form(int type); void draw_item(int type); void select_size(); void start_up();
//func2.h bool isExistL(); bool isExistM(); bool isExistS(); void draw(); bool isWin(); void isFinish();
//setup.h void init_window1(); void init_window2(); void draw_name(); void help(); void draw_board();
//define.h extern bool turn; extern bool win; extern int type; extern int g_x, g_y; extern int item_s; extern int p1_large; extern int p1_medium; extern int p1_small; extern int p2_large; extern int p2_medium; extern int p2_small; extern char items; extern int grid;

makefileは以下の通りです.

makefile

1//tictactoe++がmainです 2 3main : tictactoe++.o func1.o func2.o setup.o 4 g++ -o tictactoe++.exe tictactoe++.o func1.o func2.o setup.o -lncurses 5clean: 6 rm tictactoe++.exe func1.exe func2.exe setup.exe tictactoe++.o func1.o select.o func2.o setup.o 7func1.o : func1.cpp 8 g++ -c func1.cpp 9func2.o : func2.cpp 10 g++ -c func2.cpp 11setup.o : setup.cpp 12 g++ -c setup.cpp

err

1g++ -c -o tictactoe++.o tictactoe++.cpp 2tictactoe++.cpp:24:31: エラー: conflicting declaration ‘int item_s [20][10]’ 3 int item_s[IT_WIDTH][IT_HEIGHT]; 4 ^ 5In file included from tictactoe++.cpp:9:0: 6define.h:5:12: 備考: previous declaration as ‘int item_s’ 7 extern int item_s; 8 ^~~~~~ 9tictactoe++.cpp:31:33: エラー: conflicting declaration ‘char items [][10][20]’ 10 char items[][IT_HEIGHT][IT_WIDTH] = { 11 ^ 12In file included from tictactoe++.cpp:9:0: 13define.h:12:13: 備考: previous declaration as ‘char items’ 14 extern char items; 15 ^~~~~ 16tictactoe++.cpp:72:23: エラー: conflicting declaration ‘int grid [2][3][3]’ 17 int grid[2][GRID][GRID] = { 18 ^ 19In file included from tictactoe++.cpp:9:0: 20define.h:13:12: 備考: previous declaration as ‘int grid’ 21 extern int grid; 22 ^~~~ 23make: *** [<ビルトイン>: tictactoe++.o] エラー 1 24

原因としてグローバル変数ががリンクされていないと思うのですが調べてもわからなかったです.
よろしくお願いします.

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージが何を言っているのかわかりませんか?

int item_s [IT_WIDTH][IT_HEIGHT];
という定義が、define.hでの
extern int item_s;
とは型が異なっており衝突しているということです。
この場合define.hでの宣言が誤っていますね。

投稿2021/07/10 15:52

itagagaki

総合スコア8402

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

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

German_p0tat0

2021/07/10 18:04

ありがとうございます.抜けていましたね.そのほかの#definen要素についても各ファイルににリンクしたらコンパイルが通りました.ありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問