クラスを引数として渡したい – プログラミング – Home

クラスを引数として渡したい
 
通知
すべてクリア

[解決済] クラスを引数として渡したい

固定ページ 1 / 2

メイン
 メイン
(@メイン)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

クラスを引数として渡したいのですが
どうしたらいいのかわかりません。
教えてください。

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

void sub(CZap zap)
{

}

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

よろしくお願いします。


引用未解決
トピックタグ
メイン
 メイン
(@メイン)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

すいません。
環境を書くのを忘れてました。

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


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

そのシンタックスエラーって

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

って感じですか?

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

class CZap
{
};

void sub( CZap );

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

void sub( CZap zap )
{

}

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


返信引用
メイン
 メイン
(@メイン)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

> 文法的には間違ってませんよね?

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

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


返信引用
メイン
 メイン
(@メイン)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

>class CZap はどこに宣言してあるんでしょうか?
宣言というのはどこでincludeしてあるかという意味ですか?
勉強不足ですみません。

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

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


返信引用
ぽち
 ぽち
(@ぽち)
ゲスト
結合: 22年前
投稿: 24
 

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


返信引用
メイン
 メイン
(@メイン)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

>>ポチ 様

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

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


返信引用
ぽち
 ぽち
(@ぽち)
ゲスト
結合: 22年前
投稿: 24
 

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

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


返信引用
メイン
 メイン
(@メイン)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

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

そうでしたか・・

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


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

>今回は、データ群とそれを操作するメソッドのクラスを作りたいのですが
>どういったクラスを基本クラスにすれば良いのでしょう?

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

余談ですけど

>void sub( CZap zap )

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

void sub( CZap& zap )

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


返信引用
メイン
 メイン
(@メイン)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

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

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

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

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

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


返信引用
ぽち
 ぽち
(@ぽち)
ゲスト
結合: 22年前
投稿: 24
 

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

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


返信引用
メイン
 メイン
(@メイン)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

下記はエラーメッセージです。
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
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

問題が発生している位置が全然違うし……。

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


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました