2016-12-03 48 views
0

我有一個抽象類,它有一個函數指針列表,並且我想插入到該列表指針中,以指向子類中的函數。我有以下代碼:將子類中的函數添加到抽象父類中的函數列表中

class Parent { 
    public: 
     typedef Output* (*function_pointer)(Input*); 
     vector<function_pointer> compute_functions; 
} 
class Child : public Parent { 
public: 
     Output* f1(Input* input) {} 
     Output* f2(Input* input) {} 
     void user_insertFunctions(){ 
       compute_functions.push_back(&f1); 
       compute_functions.push_back(&f2); 
     } 
} 

但是我得到的錯誤: test1_Engine.cpp:37:32: error: ISO C++ forbids taking the address ofan unqualified or parenthesized non-static member function to form a pointer to member function. Say ‘&test1_Engine::f2’ [-fpermissive]

我必須在子類的功能,但功能的抽象父類的列表。我怎樣才能做到這一點?

+1

'f1'和'f2'不是函數。他們是一流的方法。巨大差距。如果你想讓它們成爲函數,用'static'關鍵字聲明它們。 –

回答

0

f1和f2是類成員,因此您無法將它們作爲輸入參數傳遞給該向量。您可以通過更改compute_functions的類型來簡單地修復代碼:

class Input; 
class Output; 
class Child; 

class Parent { 
    public: 
     using function_pointer = Output* (Child::*)(Input*); 
     vector<function_pointer> compute_functions; 
}; 
class Child : public Parent { 
public: 
     Output* f1(Input* input) {} 
     Output* f2(Input* input) {} 
     void user_insertFunctions(){ 
       compute_functions.push_back(&Child::f1); 
       compute_functions.push_back(&Child::f2); 
     } 
};