継承でなくてインプリメント?したときのコンストラクタの引数

解決


初心者  2005-12-07 07:03:02  No: 59885

以下のようなプログラムで//ここで示した場所でエラーになります。
継承でなくてインプリメントした場合はインプリメントされたクラスにコンストラクタの引数は渡せないのでしょうか?

最近CからC++へステップアップをし始めた初心者なので基本的なことかもしれないのですが誰かお助けください。
よろしくお願いします。

class BMP{
public:
  int nSpHandle[10];
  BMP(
    char *arpcStr,
    int arnAll,
    int arnXNum,
    int arnYNum,
    int arnXSiz,
    int arnYSiz
  ){
    LoadDivGraph(arpcStr,arnAll,arnXNum,arnYNum,arnXSiz,arnYSiz,nSpHandle);
  }
};

class FIGHTER:public MOVOBJ{
  int nAni;
  BMP bmp("fighter.OBJ",5,5,1,24,24);//ここ

  FIGHTER(){
    nAni=0;
  }
};


初心者  2005-12-07 07:05:17  No: 59886

訂正
BMP bmp("fighter.bmp",5,5,1,24,24);//ここ

OBJでなくてbmpです。
置換したときに間違って置換されていたみたい。
ごめんなさい。
エラーはどちらにせよ同じものが出ます。


初心者  2005-12-07 07:07:46  No: 59887

たぶんインプリメントと言う言葉の使い方を間違えているかもしれません。


επιστημη  2005-12-07 07:15:19  No: 59888

どんなエラー・メッセージですか?


初心者  2005-12-07 07:24:31  No: 59889

わっレスがはやいですね。
うれしいです。
c:\Documents and Settings\***\My Documents\Visual Studio Projects\d1\main.cpp(85): error C2059: 構文エラー : '文字列'

このようなエラーが出ています。


Blue  2005-12-07 07:59:07  No: 59890

C2059のエラーは ソース中に認識できない文字があるというものです。
main.cppの85行目に全角文字とかないでしょうか?

ついでに VC++のバージョンも明記したほうがいいですね。


初心者  2005-12-07 08:12:25  No: 59891

ありがとうございます。
内容が足らなくてすみません。
バージョンは
Microsoft Visual C++ .NET   69504-335-0000007-18190
Microsoft Deveropment Environment 2003 Version 7.1.3091
Microsoft .NET Framework 1.1 バージョン  1.1.4322 SP1
となっています。

確認しましたが、全角文字ははないようです。

包含という言葉はインプリメントと同じ事でしょうか?
どうやら自分がやりたいのは包含のようです。

http://www.geocities.jp/ky_webid/cpp/language/013.html
http://www5c.biglobe.ne.jp/~ecb/cpp/05_01.html
自分では今ここら辺の記事を読んで勉強中です。


Blue  2005-12-07 08:24:21  No: 59892

あ〜わかりました。

class AAA
{
    int m_num;
public:
    AAA( int n ) { m_num = n; }
};

class BBB
{
    int m_num2;
    AAA m_aaa( 10 );
public:
    BBB( int m ) { m_num2 = m; }
};

みたいに、BBBのメンバ変数としてAAAを使いたいんだけど、
コンストラクタを書いてしまうとエラーになってしまうということでしょうか?

そういう場合は、メンバ変数を書くときは宣言だけにして、
BBBのコンストラクタの呼び出しの時に初期化するようにシマス。
(メンバイニシャライザ)

class BBB
{
   int m_num2;
   AAA m_aaa;
public:
   BBB( int m ) : m_aaa( 10 ) { m_num2 = m; }
};


初心者  2005-12-07 08:25:03  No: 59893

どうやらできたっぽいです。
http://www5c.biglobe.ne.jp/~ecb/cpp/05_03.html
のメンバーイニシャライザというのでできました。

昨日から詰まっていて困っていたので、つい書き込んでしまいましたが、思ったよりはやく自分で解決してしまいました。
すみません、お騒がせしました。

ちなみにこうなりました。

class BMP{
public:
  int nSpHandle[10];
  BMP(
    char *arpcStr,
    int arnAll,
    int arnXNum,
    int arnYNum,
    int arnXSiz,
    int arnYSiz
  );
  BMP(const BMP&);
};
BMP::BMP(
    char *arpcStr,
    int arnAll,
    int arnXNum,
    int arnYNum,
    int arnXSiz,
    int arnYSiz
  ){
    LoadDivGraph(arpcStr,arnAll,arnXNum,arnYNum,arnXSiz,arnYSiz,nSpHandle);
}
class FIGHTER:public MOVOBJ{
public:
  int nAni;
  BMP bmp;
  FIGHTER():bmp("fighter.bmp",5,5,1,24,24){
    nAni=0;
  }
  FIGHTER(const FIGHTER&);

};

またなにかで詰まったらお助けください。
ありがとうございました。


Blue  2005-12-07 08:28:26  No: 59894

追記

http://www5c.biglobe.ne.jp/~ecb/cpp/05_01.html
のサイトの3つ先に「メンバイニシャライザ」の説明がありました。


初心者  2005-12-07 08:28:28  No: 59895

ちょうど自分が書いてる時に書き込んでくれていたのですね。
自分が見つけたのもBlueさんの答えと同じ解決方法でした。
ほんとすみません。  勉強になります。
昨日は友達にも聞いたけどわからなかったのです。
Blueさんありがとう。
それでは解決にしておきます。


Blue  2005-12-07 08:29:18  No: 59896

って、めっちゃかぶったw


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加