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

How are void methods different, or why I can't call a void method, when an int method works fine?

本文关键字:方法 void 为什么 不能 调用 或者 何不同 常时 int 工作      更新时间:2023-10-16

为什么可以在main之外调用int方法,但调用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

如果不将int方法分配给,它也不起作用

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

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

将返回值分配给变量是有意义的,因为这样你就定义了一个全局变量,它具有你正在调用的函数的值。这没关系,尽管它可能会引起问题,但请参阅多个定义。

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