0

文字列をデータ型クラスに変換したいので、このために参照を使用します。次に、次のコードよりもマップを使用してみます。しかし、これをコンパイルしようとすると、

エラーメッセージ:

エラー:'std :: map、void *(*)()> :: mapped_type {aka void *()()}'から'void 'への無効な変換[-fpermissive]

コード:

class C1 {
public:
  C1() { std::cout << "Object of class C1 created\n"; }
  static void * create() { return (void*)new C1; }
};

class C2 {
public:
C2() { std::cout << "Object of class C2 created\n"; }
static void * create() { return (void*)new C2; }
};

typedef void * (*fptr)();

int main() {
  std::map<std::string, fptr> fpmap;
  fpmap.insert(std::make_pair(std::string("C1"), C1::create));
  fpmap.insert(std::make_pair(std::string("C2"), C2::create));

  std::string classname;
  std::cout << "Insert classname :" << std::flush;
  std::cin >> classname;

  void * obj = fpmap["C1"];
}
4

1 に答える 1

4

もしかして:

void * obj = fpmap["C1"]();

関数ポインターは、直接void*. obj関数自体を指したい場合は、 として宣言しfptrます。関数を呼び出して、objそれが返すものを指す場合は、関数を呼び出す必要があります (extra ())。

于 2013-02-24T23:54:57.080 に答える