ここでこの問題を発見しましたが、これを拡張したいと思います。私は一つのファイルに次のクラスを持っているし、それが正常に動作します:関数がクラス内の関数へのポインタを返すようにする(C++)
typedef int (*fptr)();
int f1() {
return 1;
}
int f2() {
return 2;
}
fptr f(char c) {
if (c == '1') {
return f1;
}
else {
return f2;
}
}
しかし、私は別のファイル内の関数を移動し、それらのうちの工場を作りたいとき、私は理解できないエラーが発生します。
それはこのようになります:
ヘッダー:
public class Factories{
public:
int f1();
int f2();
}
CPPFILE:
int f1() {
return 1;
}
int f2() {
return 2;
}
ヘッダー:
public class FactoryClass{
public:
fptr f(char c);
}
CPPFILE:
typedef int (*fptr)();
fptr f(char c) {
if (c == '1') {
return Factories::f1;
}
else {
return Factories::f2;
}
}
ここで、このFactoryClass関数が返されると、「戻り値の型が関数の型と一致しません」というエラーが表示されます。 アイデアをいただければ幸いです。
C++では、単純に関数ポインタを必要としない純粋仮想関数をオーバーロードすることができます。 – SPlatten
typedef int(* fptr)(); ** typedef int(Factories :: * fptr)(); ** –