静的メンバに関数ポインタを使いたい.

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

静的メンバに関数ポインタを使いたい.

#1

投稿記事 by Debt » 9年前

C++のクラスについての質問です.

静的メンバに関数ポインタを使いたいのですがエラーが出てしまいます.

コード:

double loss(double* x)
{
	return x[0];
}

class MyClass
{
public:
	static double(*func)(double*);
};
double (MyClass::*func)(double*);

int main()
{
	MyClass::func = loss;
}
error LNK1120: 1 unresolved externals
error LNK2001: unresolved external symbol "public: static double (__cdecl* MyClass::func)(double *)" (?func@MyClass@@2P6ANPAN@ZA)

関数ポインタの宣言が悪いのかなとも思うのですが,構文の間違いがわかりません.

どうか教えてください.よろしくお願いします.

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 静的メンバに関数ポインタを使いたい.

#2

投稿記事 by みけCAT » 9年前

とりあえず*の位置を移動したらコンパイルが通りました。

コード:

double loss(double* x)
{
	return x[0];
}

class MyClass
{
public:
	static double(*func)(double*);
};
double (*MyClass::func)(double*);

int main()
{
	MyClass::func = loss;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Debt

Re: 静的メンバに関数ポインタを使いたい.

#3

投稿記事 by Debt » 9年前

解決しました!
ありがとうございます.

かずま

Re: 静的メンバに関数ポインタを使いたい.

#4

投稿記事 by かずま » 9年前

解決しました、というのは、理解できたということでしょうか?
それとも、コンパイルできて、思い通りに動いただけということでしょうか?

double (*MyClass::func)(double*); ---(1)
double (MyClass::*func)(double*); ---(2)

どちらも構文上は存在します。

(2) がコンパイルできるのは次の通り。

コード:

class MyClass
{
public:
    double loss(double* x)
    {
        return x[0];
    }
};

double (MyClass::*func)(double*);
 
int main()
{
    func = &MyClass::loss;
}
(1) と (2) の違いが説明できればいいんですが、どうでしょう?

double (*MyClass::func)(double*); ---(1)

func は、MyClass のメンバである。
func は、ポインタである。
そのポインタは関数を指している。
その関数は、引数が doulbe * で、返却値が double である。

double (MyClass::*func)(double*); ---(2)

func は、MyClass のメンバではない。
func は、MyClass のメンバへのポインタである。
そのメンバは関数である。
そのメンバ関数は、引数が doulbe * で、返却値が double である。

閉鎖

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