调用成员函数没有对象错误:C++ /(G ++)oop

v_a*_*tia 0 c++ oop

我很想知道为什么以下内容会在g ++中引发错误(无法在没有对象的情况下调用成员函数).我想一个解决方法是将B类变量作为A中的静态变量 - 但我很想知道为什么,当有一个A的子类C的实例创建时,这仍然会引发错误 - 非常感谢!

#include <iostream>
#include <cstring>

using namespace std;


class B {
public:
  double var;

public:
  friend class A; 
  B() : var(1) { };
  void set(double new_rate);
};


class A {
protected:
   B main_B;

public:
  virtual void set_rate(double new_rate) { cout << "test"; 
   //B.set(new_rate); 
  }

};



class C : public A {

};

/*
void B::set(double new_rate) {
  var = new_rate;
  cout << "worked " <<current_rate <<endl;
}

*/



int main() {

  C test_C;
  A::set_rate ( 2.00 );
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

小智 7

首先,

C test_c();
Run Code Online (Sandbox Code Playgroud)

不创建C的实例,它声明一个返回C的函数.你的意思是:

C test_c;
Run Code Online (Sandbox Code Playgroud)

其次,非静态成员函数只能在类的特定实例上调用.因此,使用更正的代码,您可以说:

test_c.set_rate( 2.0);
Run Code Online (Sandbox Code Playgroud)

  • @the_drow:`C test_c();`是一个函数声明,而不是一个对象声明(和定义).我建议你删除你的-1; 尼尔是对的. (3认同)