来自类外部的c ++调用方法

时间:2013-03-10 21:40:54

标签: c++ oop class methods

好吧,我把我的问题减少到看起来很傻的东西但是我根本无法理解为什么:

#include <iostream>
class ABC{
public:
    void Print() { std::cout<<"ABC_TEST!\n"; }
};

int main(){
    Print();
    return 0;
}

给我:错误:标识符“打印”未定义 提前谢谢!

3 个答案:

答案 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!
}