無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic

無題

#1

投稿記事 by dic » 16年前

たびたび質問すいません

今下のコードを書いているのですが コンパイルエラーがでてリンクできません
どうすればいいのでしょうか?
#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です

Justy

Re:無題

#2

投稿記事 by Justy » 16年前


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

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

dic

解決

#3

投稿記事 by dic » 16年前

>Justyさん
ありがとうございます
無事解決しました

dic

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

#4

投稿記事 by dic » 16年前

解決ボタン押したのですが
またつまづいたので質問します

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

メンバ関数アクセスは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:またつまづいたので質問します

#5

投稿記事 by たかぎ » 16年前

node.[color=red>*[/color]func();

dic

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

#6

投稿記事 by dic » 16年前

>たかぎさん
お返事ありがとうございます

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

Justy

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

#7

投稿記事 by Justy » 16年前

 (node.*(node.func))();

 かな?

たかぎ

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

#8

投稿記事 by たかぎ » 16年前

> 教えられた通りコンパイルしてみましたがエラーがでました

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

Justy

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

#9

投稿記事 by Justy » 16年前

 あー、中の括弧は要らなかったですね (^^

dic

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

#10

投稿記事 by dic » 16年前

>Justyさん たかぎさん
お返事ありがとうございます

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

閉鎖

“C言語何でも質問掲示板” へ戻る