dポイントプレゼントキャンペーン実施中!

今、Visual C++(CLR)を使って、MultiClassという名前のクラスを作っています。
クラスの作り方は大体わかったのですが、
疑問が出ました。以下のように記述するとエラーが発生してしまいます

//クラスのヘッダーファイル
#pragma once

ref class MultiClass
{
public:
void MultiClass(void);
};

//クラスのCPPファイル
#include "StdAfx.h"
#include "MultiClass.h"

void MultiClass::MultiClass(void)
{
}

//エラー名
エラー1error C2380: 前の型 'MultiClass' (コンストラクタが戻り値の型を返すか、またはクラス名を再定義しています。)

エラー2error C2533: 'MultiClass::{ctor}' : コンストラクタの宣言に戻り値の型が含まれています。



ヘッダーで先頭voidを消して、CPPの先頭voidを消したら正常に
動作するのですが、普通、
戻り値 メソッド名 (引数)
なのに、なぜエラーが発生するのですか?
さらに2行目以降はなぜ、
void を先頭につけないと




エラー2error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません




というエラーが発生するのでしょうか?
ネットで調べてもまったくわかりません
わかる方お願いします

A 回答 (1件)

クラス名と同じ名前のメンバ関数を定義する事はできません。


クラス名と同じ名前のメンバ関数は,コンストラクタとして扱われます。
# コンストラクタは,名前を持ちません。記述上,クラスと同じ名前の関数として定義しますが。

コンストラクタは,戻り値の型を記述「してはいけません」。
これが,C2380/C2533の原因です。


コンストラクタ・デストラクタ・operator関数を除く通常の関数は,
必ず戻り値の型を明示しなければなりません。
これが,C4430の原因です。
なお,C4430のメモを見るとCでは省略可能のように見えますが,標準Cにおいては省略できなくなっています。
# 1999年の改正による。
    • good
    • 0
この回答へのお礼

メンバ関数ではなく、コンストラクタなんですか!
なるほど一気に解決しました!!
ありがとうございます!!!

お礼日時:2009/07/10 15:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!