クラスを引数として渡したいのですが
どうしたらいいのかわかりません。
教えてください。
void main( void )
{
CZap zap; // CZapはオリジナルのクラス
sub(zap);
}
void sub(CZap zap)
{
}
↑のようにしたいのですが、このようにしたら
シンタックスエラーと出てしまいます。
よろしくお願いします。
すいません。
環境を書くのを忘れてました。
環境は
VC++6.0
MFC
です。
よろしくお願いします。
そのシンタックスエラーって
構文エラー : 識別子 'CZap' がシンタックスエラーを起こしました。
って感じですか?
拡張子が『cpp』ではなく『c』になってませんか?
class CZap
{
};
void sub( CZap );
void main( void )
{
CZap zap; // CZapはオリジナルのクラス
sub( zap );
}
void sub( CZap zap )
{
}
拡張子が『cpp』ならこのソースでコンパイルもリンクも通りますよ。
>構文エラー : 識別子 'CZap' がシンタックスエラーを起こしました。
>
>って感じですか?
はい、その通りです。
ちゃんと拡張子もcppになってます。(VC++が自動生成したものです)
文法的には間違ってませんよね?^^;
> 文法的には間違ってませんよね?
間違ってなければ構文エラーになんかなりませんって。
class CZap はどこに宣言してあるんでしょうか?
>class CZap はどこに宣言してあるんでしょうか?
宣言というのはどこでincludeしてあるかという意味ですか?
勉強不足ですみません。
#include stdafx.h
#include ClassTest.h
#include ClassTestDlg.h
#include Zap.h
includeは↑のようにしています。
ClassTestはメインのクラスです。
元の完全なソースがないと断定できませんが、mainの前にsubのプロトタイプがなかった
か、CZapがCObjectから(直接かどうかに関わらず)派生しているために、コピーコンス
トラクタが殺されているのではないでしょうか?
>>ポチ 様
CZapの基本クラスをCObjectにしているのですが、それが問題なのですか?
勉強不足で理解ができません。すみません。
こういったとき普通はどういった処理にするのですか?
よろしくお願いします。
> CZapの基本クラスをCObjectにしているのですが、それが問題なのですか?
> 勉強不足で理解ができません。すみません。
やはりそうでしたか?
CObjectは誤ってオブジェクトのコピー操作を行わないように、デフォルトのコピーコン
ストラクタと代入演算子が殺されています。
CObjectから継承したクラスでコピー操作を必要とするときは、明示的にコピーコンスト
ラクタや代入演算子を定義しなければなりません。
>CObjectは誤ってオブジェクトのコピー操作を行わないように、デフォルトのコピーコン
>ストラクタと代入演算子が殺されています。
>CObjectから継承したクラスでコピー操作を必要とするときは、明示的にコピーコンスト
>ラクタや代入演算子を定義しなければなりません。
そうでしたか・・
今回は、データ群とそれを操作するメソッドのクラスを作りたいのですが
どういったクラスを基本クラスにすれば良いのでしょう?
まだ、そういったところを理解できてないので・・・
よろしくお願いします。
>今回は、データ群とそれを操作するメソッドのクラスを作りたいのですが
>どういったクラスを基本クラスにすれば良いのでしょう?
基底クラスなしでいいのではないでしょうか?
メソッド付構造体ってカンジで。
余談ですけど
>void sub( CZap zap )
これがCObjectから派生させたものだとだめなのが
コピーができてしまうからなのであれば、
void sub( CZap& zap )
としてコピーを作らなくなるので、これでいけると思いますが。
>基底クラスなしでいいのではないでしょうか?
>メソッド付構造体ってカンジで。
勘違いしてました。
その通りです。
>>void sub( CZap zap )
>
>これがCObjectから派生させたものだとだめなのが
>コピーができてしまうからなのであれば、
>
>void sub( CZap& zap )
>
>としてコピーを作らなくなるので、これでいけると思いますが。
だめでした。
それでもシンタックスエラーが出てしまいます。
基本クラスなしのCZapクラスを作ってやってみたんですけど
それでもシンタックスエラーが出てしまいます。
> 基本クラスなしのCZapクラスを作ってやってみたんですけど
> それでもシンタックスエラーが出てしまいます。
何かとんでもなくつまらないことが原因かも知れません。
エラーメッセージを貼り付けてください。
下記はエラーメッセージです。
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
問題が発生している位置が全然違うし……。
CDateとは何ですか?
単に,ClassTest2Dlg.hの18行目より前に,
CDateの定義が存在しないだけではないですか?