簡體   English   中英

從類外部調用c ++

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM