当int方法正常工作时,void方法如何不同,或者为什么我不能调用void方法?

时间:2016-05-15 16:57:06

标签: c++ methods global-variables

为什么可以在int之外调用main方法,但调用void方法会引发错误?

#include <iostream>

using namespace std;

class A
{
    public:
        int foo();
        void bar();
};

int A::foo() {
    cout << "called foo()" << endl;
    return 123;
};

void A::bar() {
    cout << "called bar()" << endl;
};


A* a = new A();
int a_val = a->foo();
a->bar();                              // error: unknown type name 'a'


int main(int argc, char* argv[])
{
    a->bar();
  cout << a_val << endl ;
}

错误是:

main.cpp:24:1: error: unknown type name 'a'
a->bar();  // error: unknown type name 'a'
^
main.cpp:24:2: error: cannot use arrow operator on a type
a->bar();  // error: unknown type name 'a'
 ^

生成了2个错误。

当该行被注释掉时,输出为:

called foo()
called bar()
123

1 个答案:

答案 0 :(得分:3)

如果您不指定int方法也不起作用

a->foo(); //error: unknown type name 'a'

那是因为你不能在全局范围内调用函数,它没有任何意义(即它们是否为每个#include多次执行?)。

将返回值赋给变量是有意义的,因为那样您将定义一个全局变量,该变量具有您正在调用的函数的值。没关系,即使它可能导致问题,也可以看到多个定义。

TL; DR 您只能在全局范围内定义,声明和初始化变量/函数/结构/类,而不是其他任何东西。