自作ゲームのプログラムが700行を超え、
ファイルを分割をしようとしたのですが上手くいきません。
LINK2005というエラーが出ているみたいです。
googleでLINK2005についてや、様々な方法を調べ、
色々な方法を試しましたがエラーが全然取れません。
分割する前のプログラムを添付します。
何も問題無ければ、画面が真っ赤になるようにしてあります。
どうすればいいのか、ご指導よろしくおねがいします。
※追記
分割はクラス単位です
ファイル分割が上手くいきません
ファイル分割が上手くいきません
- 添付ファイル
-
- Splitted.zip
- 分割後のインクルードガードを抜いたもの一式です
- (8.27 KiB) ダウンロード数: 75 回
-
- main.cpp
- 分割前のコードです
- (20.39 KiB) ダウンロード数: 77 回
Re: ファイル分割が上手くいきません
このタイトルだと、プログラムでファイルを分割することを考えてしまいますね。
分割コンパイルで検索すると幸せになれるでしょう。
方法はコンパイラに依存します。ソースファイルをコンパイルするときに複数のファイルを指定する方法や、
統合開発環境で指定する場合など、開発環境に依存するので、開発環境を書いてください。
分割コンパイルで検索すると幸せになれるでしょう。
方法はコンパイラに依存します。ソースファイルをコンパイルするときに複数のファイルを指定する方法や、
統合開発環境で指定する場合など、開発環境に依存するので、開発環境を書いてください。
Re: ファイル分割が上手くいきません
開発環境は Microsoft Visual Studio 2010 professional です
分割コンパイルで調べました。
この方法だと継承とかの関係だと思うのですが、再定義がどうのこうのでエラーが起きてしまいます。
他に方法は無いでしょうか?
分割コンパイルで調べました。
この方法だと継承とかの関係だと思うのですが、再定義がどうのこうのでエラーが起きてしまいます。
他に方法は無いでしょうか?
Re: ファイル分割が上手くいきません
ソリューションエクスプローラビューのソースファイルアイコンを右クリックして、[追加]-[既存の項目]を選択。はんなり さんが書きました:開発環境は Microsoft Visual Studio 2010 professional です
分割したソースファイルを指定します。
Re: ファイル分割が上手くいきません
ヘッダで定義をするのであればextern指定子ではなくstatic指定子を使ってくださいね。
http://www.geocities.jp/ky_webid/c/032.html
ファイル分割には関係無いのですが、private指定子はご存知ですか?
http://www.geocities.jp/ky_webid/c/032.html
ファイル分割には関係無いのですが、private指定子はご存知ですか?
Re: ファイル分割が上手くいきません
指示通り、入れました。ついでに.hもいれました。maru さんが書きました:ソリューションエクスプローラビューのソースファイルアイコンを右クリックして、[追加]-[既存の項目]を選択。
分割したソースファイルを指定します。
staticを使いましたがやっぱり無理です。エラーが消えません。しひ さんが書きました:ヘッダで定義をするのであればextern指定子ではなくstatic指定子を使ってくださいね。
http://www.geocities.jp/ky_webid/c/032.html
ファイル分割には関係無いのですが、private指定子はご存知ですか?
private指定子は知ってます。あんまり使いませんが・・・
ビルドの情報を上げます。見た限りだとグローバル変数が何度も定義されているようです。
class_system.hは他のヘッダーから呼び出しているからだと思います(じゃないと継承が出来ないため)
------ ビルド開始: プロジェクト: RTS_Game, 構成: Debug Win32 ------
2011/04/21 19:11:07 にビルドを開始しました。
InitializeBuildStatus:
"Debug\RTS_Game.unsuccessfulbuild" のタッチ タスクを実行しています。
ClCompile:
main.cpp
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(20): error C2370: 'SE_USE' : 再定義 ; 異なるストレージ クラスです。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(20) : 'SE_USE' の宣言を確認してください。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(21): error C2370: 'BGM_USE' : 再定義 ; 異なるストレージ クラスです。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(21) : 'BGM_USE' の宣言を確認してください。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(22): error C2370: 'Using_Class' : 再定義 ; 異なるストレージ クラスです。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(22) : 'Using_Class' の宣言を確認してください。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(34): error C2011: 'System' : 'class' 型の再定義
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(34) : 'System' の宣言を確認してください。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_title.h(6): error C2504: 'System' : 定義されていない基本クラスが宣言されています。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(20): error C2370: 'SE_USE' : 再定義 ; 異なるストレージ クラスです。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(20) : 'SE_USE' の宣言を確認してください。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(21): error C2370: 'BGM_USE' : 再定義 ; 異なるストレージ クラスです。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(21) : 'BGM_USE' の宣言を確認してください。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(22): error C2370: 'Using_Class' : 再定義 ; 異なるストレージ クラスです。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_system.h(22) : 'Using_Class' の宣言を確認してください。
c:\users\r.sato\documents\visual studio 2010\projects\rts_game\dxgame\class_battlemenu.h(6): error C2504: 'System' : 定義されていない基本クラスが宣言されています。
ビルドに失敗しました。
経過時間 00:00:02.41
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
Re: ファイル分割が上手くいきません
staticを付け、
#pragma once
というインクルードガードにしたら、解決できました!
どうやらインクルードガードの使い方が悪かったようです。
maruさん、しひさん
ありがとうございました!m(_ _)m
#pragma once
というインクルードガードにしたら、解決できました!
どうやらインクルードガードの使い方が悪かったようです。
maruさん、しひさん
ありがとうございました!m(_ _)m