クラスを引数として渡したい

[戻る]
メイン 2003/11/22(土) 21:21:42
クラスを引数として渡したいのですが
どうしたらいいのかわかりません。
教えてください。

void main( void )
{
    CZap zap;      // CZapはオリジナルのクラス
    sub(zap);
}

void sub(CZap zap)
{


}

↑のようにしたいのですが、このようにしたら
シンタックスエラーと出てしまいます。

よろしくお願いします。

メイン 2003/11/22(土) 21:29:36
すいません。
環境を書くのを忘れてました。

環境は
VC++6.0
MFC
です。
よろしくお願いします。

ひろぴー 2003/11/22(土) 22:27:21
そのシンタックスエラーって

構文エラー : 識別子 'CZap' がシンタックスエラーを起こしました。

って感じですか?

拡張子が『cpp』ではなく『c』になってませんか?


class CZap
{
};

void sub( CZap );

void main( void )
{
    CZap zap;      // CZapはオリジナルのクラス
    sub( zap );
}

void sub( CZap zap )
{


}

拡張子が『cpp』ならこのソースでコンパイルもリンクも通りますよ。

メイン 2003/11/23(日) 00:00:45
>構文エラー : 識別子 'CZap' がシンタックスエラーを起こしました。
>
>って感じですか?
はい、その通りです。
ちゃんと拡張子もcppになってます。(VC++が自動生成したものです)
文法的には間違ってませんよね?^^;

επιστημη [E-Mail] [HomePage] 2003/11/23(日) 00:36:28
> 文法的には間違ってませんよね?

間違ってなければ構文エラーになんかなりませんって。

class CZap はどこに宣言してあるんでしょうか?

メイン 2003/11/23(日) 10:19:21
>class CZap はどこに宣言してあるんでしょうか?
宣言というのはどこでincludeしてあるかという意味ですか?
勉強不足ですみません。

#include "stdafx.h"
#include "ClassTest.h"
#include "ClassTestDlg.h"
#include "Zap.h"

includeは↑のようにしています。
ClassTestはメインのクラスです。

ぽち 2003/11/23(日) 13:52:44
元の完全なソースがないと断定できませんが、mainの前にsubのプロトタイプがなかった
か、CZapがCObjectから(直接かどうかに関わらず)派生しているために、コピーコンス
トラクタが殺されているのではないでしょうか?

メイン 2003/11/23(日) 14:14:04
>>ポチ 様

CZapの基本クラスをCObjectにしているのですが、それが問題なのですか?
勉強不足で理解ができません。すみません。

こういったとき普通はどういった処理にするのですか?
よろしくお願いします。

ぽち 2003/11/23(日) 14:27:50
> CZapの基本クラスをCObjectにしているのですが、それが問題なのですか?
> 勉強不足で理解ができません。すみません。

やはりそうでしたか?
CObjectは誤ってオブジェクトのコピー操作を行わないように、デフォルトのコピーコン
ストラクタと代入演算子が殺されています。
CObjectから継承したクラスでコピー操作を必要とするときは、明示的にコピーコンスト
ラクタや代入演算子を定義しなければなりません。

メイン 2003/11/23(日) 16:16:27
>CObjectは誤ってオブジェクトのコピー操作を行わないように、デフォルトのコピーコン
>ストラクタと代入演算子が殺されています。
>CObjectから継承したクラスでコピー操作を必要とするときは、明示的にコピーコンスト
>ラクタや代入演算子を定義しなければなりません。

そうでしたか・・

今回は、データ群とそれを操作するメソッドのクラスを作りたいのですが
どういったクラスを基本クラスにすれば良いのでしょう?
まだ、そういったところを理解できてないので・・・
よろしくお願いします。

PAI 2003/11/23(日) 20:03:17
>今回は、データ群とそれを操作するメソッドのクラスを作りたいのですが
>どういったクラスを基本クラスにすれば良いのでしょう?

基底クラスなしでいいのではないでしょうか?
メソッド付構造体ってカンジで。


余談ですけど

>void sub( CZap zap )

これがCObjectから派生させたものだとだめなのが
コピーができてしまうからなのであれば、

void sub( CZap& zap )

としてコピーを作らなくなるので、これでいけると思いますが。

メイン 2003/11/23(日) 20:31:20
>基底クラスなしでいいのではないでしょうか?
>メソッド付構造体ってカンジで。

勘違いしてました。
その通りです。


>>void sub( CZap zap )
>
>これがCObjectから派生させたものだとだめなのが
>コピーができてしまうからなのであれば、
>
>void sub( CZap& zap )
>
>としてコピーを作らなくなるので、これでいけると思いますが。

だめでした。
それでもシンタックスエラーが出てしまいます。


基本クラスなしのCZapクラスを作ってやってみたんですけど
それでもシンタックスエラーが出てしまいます。

ぽち 2003/11/23(日) 20:56:04
> 基本クラスなしのCZapクラスを作ってやってみたんですけど
> それでもシンタックスエラーが出てしまいます。

何かとんでもなくつまらないことが原因かも知れません。
エラーメッセージを貼り付けてください。

メイン 2003/11/23(日) 21:16:11
下記はエラーメッセージです。
CZapはCDateに変わってます。
よろしくお願いします。


--------------------構成: ClassTest2 - Win32 Debug--------------------
コンパイル中...
ClassTest2.cpp
c:\c++\classtest2\classtest2dlg.h(18) : error C2061: 構文エラー : 識別子 'CDate' が
シンタックスエラーを起こしました。
ClassTest2Dlg.cpp
c:\c++\classtest2\classtest2dlg.h(18) : error C2061: 構文エラー : 識別子 'CDate' が
シンタックスエラーを起こしました。
C:\c++\ClassTest2\ClassTest2Dlg.cpp(129) : error C2660: 'sub' : 関数が不正な 1 
個の実引数をともなって呼び出されました。
C:\c++\ClassTest2\ClassTest2Dlg.cpp(192) : error C2511: 'sub' : オーバーロードされたメ
ンバ関数が '<Unknown>' にありません。
コードを生成中...
cl.exe の実行エラー

ClassTest2.exe - エラー 4、警告 0

YuO [E-Mail] 2003/11/23(日) 22:16:10
問題が発生している位置が全然違うし……。

CDateとは何ですか?
単に,ClassTest2Dlg.hの18行目より前に,
CDateの定義が存在しないだけではないですか?

ぽち 2003/11/23(日) 23:03:30
CDateとかClassTest2とか、それまでの質問内容とぜんぜん違いますね。
問題を解決しないまま、複雑化しているようにしか見えないのですが...

メイン 2003/11/24(月) 00:06:52
[[解決]]
今、ほかの(家の)PCでもやってみたんですが、
何も変更していないのに、なぜかうまくいきました。
お騒がせしてすみませんでした。


>CDateとかClassTest2とか、それまでの質問内容とぜんぜん違いますね。

ClassTest2はメインのクラスです。
言うのを忘れてました。すみません。

ちなみに、質問内容を簡略化したのは、
ソースのどこを書き込めばいいのか分からなかったのと(過去ログを見ればかいてありま
した^^;)、
こっちのほうが見やすいかな〜と思ったからです(勝手な判断でした)。

以後気をつけます。

古いスレッドには追加発言できません。