MinGW を使って 趣味で C/C++ ( Windows API あり ) でやっています。
コンパイルエラー関連ですが、
redefinition ( 多重定義 ) とエラーが出るときがあります。
CPPファイル 一個に収まる場合はコードを読んで、cout ( または printf ) で表示したりすることで
わかるかもしれませんが、
分割コンパイルしている場合が厄介です。
たとえば、
WMainWindow.cpp 及び WMainWindow.h というファイルにWMainWindowクラスなるものを作成して、
他にもEDIT, BUTTON, RADIO, ... と コントロールがありますから、
それぞれクラス化します。
で、インクルード用として、Control.h を生成して、
WMainWindow.h, WEdit.h ( EDIT ), WButton.h ( BUTTON ), WList.h ( LIST )... をインクルードします。
使うときは この Control.h をインクルードするとします。
その後、必要なヘッダファイルをインクルードしたりするためのヘッダファイル Info.h を生成して、
Control.h もインクルードしておきます。
Command.cpp ( GUI 版で ウィンドウプロシージャ等を定義したりする ),
main.cpp の両方で Info.h をインクルードします。
このやり方でうまく言っていたのですが、
分割コンパイルといっても、
$g++ -o main.cpp Command.cpp (パス)WMainWindow.cpp (パス)WButton.cpp ...
のように書くファイルだけ分割して、
コンパイル自体は そのまま g++ に渡すっていうやり方でした。
ですが、この方法だと WMainWindow.cpp, WButton.cpp 等をコンパイルして Oファイルにした後に リンクするからなのか、
時間がかかります。
単純なソースコードを作ってみて
Oファイルにした後に Aファイルに固めたとして、
リンク&生成 だとより早く終わりました。
なので、実際に作りたいもの用ではなくて Aファイル生成用のプロジェクトを作ってこれで Aファイルを作り、
実際のプログラムにリンク&生成 するというやり方にしたいと思い、
いろいろいじっていると ( どこをどんな風にやったか忘れた... 思いつきでやっているため... )
"WMainWindow というクラスは存在しない" みたいなエラーが出たので、
チェックしてみると、WMainWindow.cppと WMainWindow.h が無くなっているのかなんなのかわかりませんが、
なぜか無いことに...
なので WMainWindow.cpp及び ヘッダファイル を新規作成して...
とやると、Aファイル作成用プロジェクトではうまくいったのですが、
なぜか実際に作りたいソフト用の方では、
Control.h 内... (パス)WMainWindow.hの41行目, class WMainWindow 多重定義 ...
とコンパイルエラーが出て、コンパイルできません。
"多重定義" とあることから、循環インクルード? かなんかだと思うのですが、
どこで定義されているのか...
こういうのを例えば、
WMainWindow.h 及び WMainWindow.cpp 内: class WMainWindow 再定義 main.cpp 及び Command.cpp 内: WMainWindow.h を 循環インクルード ...
みたいにどこが原因なのかがわかればいいのですが...
こういう場合って、皆さんはどうしていますか?
その手のソフトを使うのもいいですが、
その場合は「○○っていうソフトを使えば楽」とか、
「○○というキーワードでググれば案外ある」とか。
printfデバッグ等のような手法 なら、その方法等を。
[環境等]
言語 : C/C++
Windows API: あり
コンパイラ : MinGW ( g++ )
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー