为什么可以在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
答案 0 :(得分:3)
如果您不指定int
方法也不起作用
a->foo(); //error: unknown type name 'a'
那是因为你不能在全局范围内调用函数,它没有任何意义(即它们是否为每个#include
多次执行?)。
将返回值赋给变量是有意义的,因为那样您将定义一个全局变量,该变量具有您正在调用的函数的值。没关系,即使它可能导致问题,也可以看到多个定义。
TL; DR 您只能在全局范围内定义,声明和初始化变量/函数/结构/类,而不是其他任何东西。