ページ 11

無題

Posted: 2008年11月03日(月) 19:54
by dic
たびたび質問すいません

今下のコードを書いているのですが コンパイルエラーがでてリンクできません
どうすればいいのでしょうか?
#include <stdio.h>

class CNode;

typedef	(CNode::*FUNC)(void);

class CNode {
	double	x;
	void	hoge() { }
public:
	CNode();
	FUNC		func;
};

CNode::CNode() {
	x = 0.0;
	func = &CNode::hoge;	// ここでエラー
	func = this->hoge;		// これもエラー
}

void	main()
{
}
//ここでエラーのところにメンバ関数へのポインタを代入したいのですが
うまくいきません
コンパイラはVC++6.0です

Re:無題

Posted: 2008年11月03日(月) 20:01
by Justy

>typedef (CNode::*FUNC)(void);

 とりあえず、戻り値を付けてあげましょう。

解決

Posted: 2008年11月03日(月) 20:06
by dic
>Justyさん
ありがとうございます
無事解決しました

またつまづいたので質問します

Posted: 2008年11月03日(月) 20:18
by dic
解決ボタン押したのですが
またつまづいたので質問します

また、下の // ここでエラー
というところでコンパイルエラーになってしまいます
どうすればいいのでしょうか?

メンバ関数アクセスはprivateですが
そこは無視してください(ってこのレベル答えれるのなら分かるかな
#include <stdio.h>

class CNode;

typedef	void	(CNode::*FUNC)(void);
typedef	void	(CNode::*FUNCTION)( CNode *node );

class CNode {
	double	x;
	void	hoge() { printf( "CNode::hoge called.\n" ); }
	void	show( CNode *node ) { printf( "%f\n", node->x ); }
public:
	CNode();
	FUNC		func;
	FUNCTION	function;
};

CNode::CNode() {
	x = 0.0;
	func = CNode::hoge;
	function = CNode::show;
}

void	main()
{
	CNode	node;

	node.func();	//	ここでエラー
}

Re:またつまづいたので質問します

Posted: 2008年11月03日(月) 20:30
by たかぎ
node.[color=red>*[/color]func();

Re:またつまづいたので質問します

Posted: 2008年11月03日(月) 20:37
by dic
>たかぎさん
お返事ありがとうございます

教えられた通りコンパイルしてみましたがエラーがでました
node.*func();	//	ここでエラー
error C2065: 'func' : 定義されていない識別子です。
error C2297: '.*' : 不正な右オペランドです。
とでます

Re:またつまづいたので質問します

Posted: 2008年11月03日(月) 21:00
by Justy
 (node.*(node.func))();

 かな?

Re:またつまづいたので質問します

Posted: 2008年11月03日(月) 21:00
by たかぎ
> 教えられた通りコンパイルしてみましたがエラーがでました

失礼しました。
(node.*node.func)();
でどうでしょうか?

Re:またつまづいたので質問します

Posted: 2008年11月03日(月) 21:05
by Justy
 あー、中の括弧は要らなかったですね (^^

Re:またつまづいたので質問します

Posted: 2008年11月03日(月) 21:06
by dic
>Justyさん たかぎさん
お返事ありがとうございます

お二人方どちらの方法でもいけました
ありがとうございました