ファイル分割が上手くいきません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
はんなり
記事: 48
登録日時: 10年前

ファイル分割が上手くいきません

#1

投稿記事 by はんなり » 9年前

自作ゲームのプログラムが700行を超え、
ファイルを分割をしようとしたのですが上手くいきません。
LINK2005というエラーが出ているみたいです。

googleでLINK2005についてや、様々な方法を調べ、
色々な方法を試しましたがエラーが全然取れません。

分割する前のプログラムを添付します。
何も問題無ければ、画面が真っ赤になるようにしてあります。


どうすればいいのか、ご指導よろしくおねがいします。


※追記
分割はクラス単位です
添付ファイル
Splitted.zip
分割後のインクルードガードを抜いたもの一式です
(8.27 KiB) ダウンロード数: 35 回
main.cpp
分割前のコードです
(20.39 KiB) ダウンロード数: 33 回

maru
記事: 150
登録日時: 9年前

Re: ファイル分割が上手くいきません

#2

投稿記事 by maru » 9年前

このタイトルだと、プログラムでファイルを分割することを考えてしまいますね。
分割コンパイルで検索すると幸せになれるでしょう。

方法はコンパイラに依存します。ソースファイルをコンパイルするときに複数のファイルを指定する方法や、
統合開発環境で指定する場合など、開発環境に依存するので、開発環境を書いてください。

アバター
はんなり
記事: 48
登録日時: 10年前

Re: ファイル分割が上手くいきません

#3

投稿記事 by はんなり » 9年前

開発環境は Microsoft Visual Studio 2010 professional です

分割コンパイルで調べました。
この方法だと継承とかの関係だと思うのですが、再定義がどうのこうのでエラーが起きてしまいます。
他に方法は無いでしょうか?

maru
記事: 150
登録日時: 9年前

Re: ファイル分割が上手くいきません

#4

投稿記事 by maru » 9年前

はんなり さんが書きました:開発環境は Microsoft Visual Studio 2010 professional です
ソリューションエクスプローラビューのソースファイルアイコンを右クリックして、[追加]-[既存の項目]を選択。
分割したソースファイルを指定します。

しひ

Re: ファイル分割が上手くいきません

#5

投稿記事 by しひ » 9年前

ヘッダで定義をするのであればextern指定子ではなくstatic指定子を使ってくださいね。
http://www.geocities.jp/ky_webid/c/032.html

ファイル分割には関係無いのですが、private指定子はご存知ですか?

アバター
はんなり
記事: 48
登録日時: 10年前

Re: ファイル分割が上手くいきません

#6

投稿記事 by はんなり » 9年前

maru さんが書きました:ソリューションエクスプローラビューのソースファイルアイコンを右クリックして、[追加]-[既存の項目]を選択。
分割したソースファイルを指定します。
指示通り、入れました。ついでに.hもいれました。
しひ さんが書きました:ヘッダで定義をするのであればextern指定子ではなくstatic指定子を使ってくださいね。
http://www.geocities.jp/ky_webid/c/032.html

ファイル分割には関係無いのですが、private指定子はご存知ですか?
staticを使いましたがやっぱり無理です。エラーが消えません。
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: ファイル分割が上手くいきません

#7

投稿記事 by しひ » 9年前

自分のところではzipファイルにあったヘッダファイル全てにインクルードガードを付けて

コード:

/*
extern int SE_USE=1;
extern int BGM_USE=0;
extern int Using_Class=0;
*/

static int SE_USE=1;
static int BGM_USE=0;
static int Using_Class=0;
で解決するので、残念ながら他の手段が分かりません。

アバター
はんなり
記事: 48
登録日時: 10年前

Re: ファイル分割が上手くいきません

#8

投稿記事 by はんなり » 9年前

staticを付け、
#pragma once
というインクルードガードにしたら、解決できました!
どうやらインクルードガードの使い方が悪かったようです。

maruさん、しひさん
ありがとうございました!m(_ _)m

閉鎖

“C言語何でも質問掲示板” へ戻る