[英]c++ calling method from outside of a class
好的,我将问题简化为看起来很傻的东西,但是我根本不明白为什么会这样:
#include <iostream>
class ABC{
public:
void Print() { std::cout<<"ABC_TEST!\n"; }
};
int main(){
Print();
return 0;
}
给我:错误:标识符“打印”未定义预先感谢!
应该是这样的:
#include <iostream>
class ABC{
public:
void Print() { std::cout<<"ABC_TEST!\n"; }
};
int main(){
ABC abc;
abc.Print();
return 0;
}
您需要先创建ABC
类型的对象,然后才能调用实例方法(或非静态的成员函数)
另外, Print()
可以是静态函数,您可以使用::
运算符进行调用。
class ABC {
public:
static void Print() { std::cout << "ABC_TEST\n"; }
};
int main()
{
ABC::Print();
return 0;
}
最重要的是, Print()
也可以是全局函数:
void Print()
{
std::cout << "ABC_TEST\n" ;
}
int main()
{
Print();
return 0;
}
Print()
是ABC
的成员函数,因此只能在ABC
的实例上调用它:
ABC abc;
abc.Print();
完全不相关的说明是,在C ++中隐含一个值为0
的return,因此不必编写return 0
。
Print()
是ABC类的成员函数 ,您需要一个对象来调用它:
int main()
{
ABC abc; // This creates an instance of ABC
abc.Print();
// ^^^^
// This invokes member function `Print()` on the object abc.
return 0;
}
abc
的地址将作为隐式第一个参数传递给函数Print()
:该参数将作为this
指针在Print()
内部(更一般地,在调用的成员函数内部)访问。
如果您尝试调用Print()
好像它是一个非成员的自由函数,则不会传递任何隐式的this
指针,并且编译器会抱怨它是有意义的。
如果您希望能够像以前那样调用Print()
,则应使其成为非成员函数:
void Print() { std::cout<<"ABC_TEST!\n"; }
int main()
{
Print(); // This is fine now!
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.