classname :: dofunction ......它是什么?我怎么用它?

时间:2011-06-11 07:37:11

标签: c++

程序员每隔一段时间就会在她的代码中看到类似的东西:

classname::dofunction();

示例:

class person
{
private:
    string name ; 

public:
    string getperson() { return name ; }
};

void main()
{
    ............
    .........
    ........

    person::getperson(); 
}

我想使用类似上一个示例的内容,但是我收到了这个错误:

 error C2352:
 'GUI_Window::Get_FrameWindowPtr' :
 illegal call of non-static member
 function
  1. 这项技术的名称是什么?
  2. 您能解释一下如何使用它吗?

5 个答案:

答案 0 :(得分:2)

classname::dofunction() ;

调用类dofunction()内的静态函数classname

为了能够以这种方式调用函数,你的函数应该在类中是静态的,这显然不是我们所能看到的,所以错误。

解决您的问题,

  1. 为什么要以这种方式调用函数?
  2. 您的想法存在缺陷,因为即使您将getperson()作为静态函数,它也无法访问name这是一个非静态类成员。通常,类中的静态函数只能访问静态类成员。

    您可以将getperson()作为非静态成员函数,并通过类的对象调用它。

    class person obj;
    obj.getperson();
    

    你应该阅读更多关于在C ++中使用static关键字的内容,并重新思考你的建议实现的想法。

答案 1 :(得分:2)

该示例调用类中定义的静态方法。但是在您提供的示例中,getperson()是实例方法,而不是静态方法。必须使用对象实例调用它,而不是类名。

class MyClass {
private:
  int _val;

public:

int instanceFunction () {
  return _val;
}

// can't access member data or use 'this'
static int staticFunction () { 
  return 5;
}
}

int main () {
  int val1 = MyClass::staticFunction(); // static call

  MyClass c;
  int val2 = c.instanceFunction (); // instance call
}

答案 2 :(得分:1)

您必须将getperson()声明为类的静态方法。

static string getperson()
{
//definition here
}

答案 3 :(得分:0)

这种语法适用于调用静态函数。 请阅读this了解原则。

答案 4 :(得分:0)

您获得的错误意味着您尝试像函数一样调用非静态函数。非静态函数需要现有对象:

person p;
string name = p.getperson();

static关键字添加到功能缩减中,您将能够以这种方式调用它:

string name = person::getperson()

但静态函数当然不能访问非静态成员。