繁体   English   中英

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

[英]calling member function without object error: C++ / (G++) 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;
}

首先,

C test_c();

不会创建C的实例,而是声明一个返回C的函数。您的意思是:

C test_c;

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

test_c.set_rate( 2.0);

您可以使用显式的<class>::来调用非静态成员函数,从而禁用任何虚拟函数机制,但是对于非静态成员,您仍需要指定要在其上调用函数的类实例。

例如

int main()
{
    C test_C;
    test_C.A::set_rate(2.00);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM