错误:非静态成员函数 C++ 的无效使用

用户3798451

我有两个要链调用的类(主 -> 执行 -> 计算)。但是,问题是当我使用:

&calculate::addition;

即使编译器没有返回任何错误,也不会调用加法。如果我尝试删除对

calculate::addition;

编译器返回错误

error: invalid use of non-static member function ‘void calculate::addition(double&, double, double)’
     case 'a' : *calculate::addition; break;
                            ^~~~~~~~

尝试在 void 之前使用 static ,结果与使用引用相同。

#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;   
}
用户32434999

您的代码中有几个问题。开始吧:

error: invalid use of non-static member function ‘void calculate::addition(double&, double, double)’
 case 'a' : *calculate::addition; break;

这意味着您必须创建一个计算实例或使用静态标记该方法,例如 static void addition(double&, double, double);

所以把你的班级改成

class calculate {
public:
    static void addition(double&, double, double);
    static void substraction(double&, double, double);
    static void multiply(double&, double, double);
    static void division(double&, double, double);
};

下一个问题是,在您的 switch 语句中,您只创建指向函数的指针

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;
    }   
}

这永远不会执行函数,而只会创建一个立即丢弃的函数指针。

为了让您的代码工作,请考虑以下代码(注意代码中的注释,其中解释了所需的更改):

#include <iostream>

class execute
{
public:
    void exec(char, double&, double, double);
}jalan;

class calculate {
public: // added static keyword so you do not need to create a class instance
    static void addition(double&, double, double);
    static void substraction(double&, double, double);
    static void multiply(double&, double, double);
    static 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. Subtraction\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, result, a, b);   // you need to pass the arguments which you want to use and modify
    std::cout << result << std::endl;
    return 0;
}

void execute::exec (char option, double& res, double a, double b){
    switch(option){  // changed the function pointers to actual calls to the functions
    case 'a' : calculate::addition(res, a, b); break;
    case 'b' : calculate::substraction(res, a, b); break;
    case 'c' : calculate::multiply(res, a, b); break;
    case 'd' : calculate::division(res, a, b); 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;   
}

希望这有助于理解您的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误:在 C++ 中无效使用非静态成员函数

来自分类Dev

非静态成员函数c++线程linux的无效使用

来自分类Dev

Arduino错误(C ++):无效使用非静态数据成员

来自分类Dev

C ++无效使用非静态数据成员

来自分类Dev

C ++无效使用非静态数据成员

来自分类Dev

如何修复C ++中的“错误:无效使用非静态数据成员'tree :: root'”错误?

来自分类Dev

模板朋友功能C ++无效使用非静态数据成员错误

来自分类Dev

无效使用非静态成员函数

来自分类Dev

错误:无效使用非静态数据成员

来自分类Dev

错误:无效使用非静态成员

来自分类Dev

C ++使用模板类调用非静态成员函数

来自分类Dev

成员函数C ++的无效使用

来自分类Dev

我使用C ++引用函数或数据成员吗?(必须调用对非静态成员函数的引用)

来自分类Dev

C ++错误:必须调用对非静态成员函数的引用

来自分类Dev

使用C ++非静态成员函数的C回调函数的问题

来自分类Dev

在非静态成员函数中无效使用此方法

来自分类Dev

默认参数:在非静态成员函数外部无效使用“ this”

来自分类Dev

Android NDK Thread无效使用非静态成员函数

来自分类Dev

pthread_create-无效使用非静态成员函数

来自分类Dev

boost :: thread无效使用非静态成员函数

来自分类Dev

pthread_create-无效使用非静态成员函数

来自分类Dev

C ++ 11:使用非静态成员函数作为类构造函数中的默认参数

来自分类Dev

C ++类模板和嵌套结构。“无效使用了非静态数据成员...”

来自分类Dev

使用C ++非静态成员函数作为回调和类范围问题

来自分类Dev

C ++非静态成员函数的开销

来自分类Dev

无效使用非静态数据成员

来自分类Dev

无效使用非静态成员函数-类成员函数调用另一个类成员函数

来自分类Dev

C ++中的静态成员函数错误

来自分类Dev

学习C ++并遇到早期示例错误(非静态数据成员之前需要构造函数)

Related 相关文章

  1. 1

    错误:在 C++ 中无效使用非静态成员函数

  2. 2

    非静态成员函数c++线程linux的无效使用

  3. 3

    Arduino错误(C ++):无效使用非静态数据成员

  4. 4

    C ++无效使用非静态数据成员

  5. 5

    C ++无效使用非静态数据成员

  6. 6

    如何修复C ++中的“错误:无效使用非静态数据成员'tree :: root'”错误?

  7. 7

    模板朋友功能C ++无效使用非静态数据成员错误

  8. 8

    无效使用非静态成员函数

  9. 9

    错误:无效使用非静态数据成员

  10. 10

    错误:无效使用非静态成员

  11. 11

    C ++使用模板类调用非静态成员函数

  12. 12

    成员函数C ++的无效使用

  13. 13

    我使用C ++引用函数或数据成员吗?(必须调用对非静态成员函数的引用)

  14. 14

    C ++错误:必须调用对非静态成员函数的引用

  15. 15

    使用C ++非静态成员函数的C回调函数的问题

  16. 16

    在非静态成员函数中无效使用此方法

  17. 17

    默认参数:在非静态成员函数外部无效使用“ this”

  18. 18

    Android NDK Thread无效使用非静态成员函数

  19. 19

    pthread_create-无效使用非静态成员函数

  20. 20

    boost :: thread无效使用非静态成员函数

  21. 21

    pthread_create-无效使用非静态成员函数

  22. 22

    C ++ 11:使用非静态成员函数作为类构造函数中的默认参数

  23. 23

    C ++类模板和嵌套结构。“无效使用了非静态数据成员...”

  24. 24

    使用C ++非静态成员函数作为回调和类范围问题

  25. 25

    C ++非静态成员函数的开销

  26. 26

    无效使用非静态数据成员

  27. 27

    无效使用非静态成员函数-类成员函数调用另一个类成员函数

  28. 28

    C ++中的静态成员函数错误

  29. 29

    学习C ++并遇到早期示例错误(非静态数据成员之前需要构造函数)

热门标签

归档