[英]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.