【发布时间】:2018-09-13 12:15:49
【问题描述】:
我有两个要链式调用的类(主 -> 执行 -> 计算)。但是,问题是当我使用时:
&calculate::addition;
即使编译器没有返回任何错误,Addition 也不会被调用。如果我尝试删除对
的引用calculate::addition;
编译器返回错误
error: invalid use of non-static member function ‘void calculate::addition(double&, double, double)’
case 'a' : *calculate::addition; break;
^~~~~~~~
在 void 之前尝试使用静态,结果与使用引用相同。
#include <iostream>
class execute{
public:
void exec(char);
}jalan;
class calculate {
public:
void addition(double&, double, double);
void substraction(double&, double, double);
void multiply(double&, double, double);
void division(double&, double, double);
};
int main(void){
static double a, b;
static double result;
std::cout << "Type a, b, c, or d" << std::endl;
std::cout << "a. Addition\nb. Substraction\nc. Multiply\nd. Division" << std::endl;
std::cout << "Your Input: ";
static char option;
option = getchar();
std::cout << "First value: ";
std::cin >> a;
std::cout << "Next value: ";
std::cin >> b;
jalan.exec(option);
std::cout << result << std::endl;
return 0;
}
void execute::exec (char option){
switch(option){
case 'a' : &calculate::addition; break;
case 'b' : &calculate::substraction; break;
case 'c' : &calculate::multiply; break;
case 'd' : &calculate::division; break;
}
}
void calculate::addition(double& result, double a, double b){
result = a+b;
}
void calculate::substraction(double& result, double a, double b){
result = a-b;
}
void calculate::multiply(double& result, double a, double b){
result = a*b;
}
void calculate::division(double& result, double a, double b){
result = a/b;
}
【问题讨论】:
-
您为什么希望函数在
&calculate::addition;上被调用?你明白这个语法是什么意思吗?它创建一个函数指针(指向一个成员函数)然后丢弃它。 -
事实上,整个代码看起来你对 C++ 有严重的误解——你甚至没有尝试将参数传递到你试图在
exec中调用的函数中 -
@UnholySheep 我认为的目的是从 exec 返回选定的函数,然后用
a、b和result调用它。然而,Op 似乎没有了解返回值(并且可能不了解传递参数)