繁体   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