程序员每隔一段时间就会在她的代码中看到类似的东西:
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
答案 0 :(得分:2)
classname::dofunction() ;
调用类dofunction()
内的静态函数classname
。
为了能够以这种方式调用函数,你的函数应该在类中是静态的,这显然不是我们所能看到的,所以错误。
解决您的问题,
您的想法存在缺陷,因为即使您将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()
但静态函数当然不能访问非静态成员。