我試圖通過它們的指針調用函數。編譯這段代碼時,我得到的錯誤是說void類型的表達式不能轉換爲其他類型,但我在調用該函數之前檢查該函數是否返回void或不。有沒有另外一種方法可以實現這個目標?無法從void轉換爲int
class FuncBase {
public:
FuncBase(string n, string ret, string arg1, string arg2): name(n), retval(ret), a1(arg1), a2(arg2) {}
string getName() const { return name; }
string getRet() const { return retval; }
string getA1() const { return a1; }
string getA2() const { return a2; }
virtual void call() = 0;
private:
string name, retval, a1, a2;
};
template <typename ret, typename arg1, typename arg2>
class Func: public FuncBase {
public:
Func(string n, string r, string ar1, string ar2, ret(*fc)(arg1, arg2)):
FuncBase(n, r, ar1, ar2), func(fc) {}
void call() {
arg1 ar1;
arg2 ar2;
cout << "You chose the " << getName() << " function" << endl;
cout << "Enter a " << getA1() << ": ";
cin >> ar1;
cout << "Enter a " << getA2() << ": ";
cin >> ar2;
if (getRet() != "void") {
ret val = (*func)(ar1, ar2);
cout << getName() << " returned " << val << endl;
}
else (*func)(ar1, ar2);
cout << endl;
}
private:
// pointer to function
ret(*func)(arg1, arg2);
};
什麼是'getRet ()'? 'func'在哪裏申報? –
當詢問有關錯誤消息的問題時,請始終發佈確切的錯誤消息以及它所抱怨的行號。 –
我假設'func'是一個返回'void'的類型。即使你「知道」它沒有返回「void」(基於那個「if」),編譯器也會執行嚴格的類型檢查。 –