好吧,我把我的问题减少到看起来很傻的东西但是我根本无法理解为什么:
#include <iostream>
class ABC{
public:
void Print() { std::cout<<"ABC_TEST!\n"; }
};
int main(){
Print();
return 0;
}
给我:错误:标识符“打印”未定义 提前谢谢!
答案 0 :(得分:2)
应该是这样的:
#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;
}
答案 1 :(得分:1)
Print()
是ABC
的成员函数,因此您只能在ABC
的实例上调用它:
ABC abc;
abc.Print();
作为一个完全不相关的注释,在C ++中隐含了值为0
的返回值,因此不必编写return 0
。
答案 2 :(得分:1)
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()
:该参数可以在Print()
内部访问(更常见的是,在调用的成员函数内) this
指针。
如果你试着调用Print()
就像它是一个非成员的自由函数一样,那么就不会传递任何隐式的this
指针,而且编译器会抱怨它。
如果您希望能够以您的方式调用Print()
,则应将其设为非成员函数:
void Print() { std::cout<<"ABC_TEST!\n"; }
int main()
{
Print(); // This is fine now!
}