当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?
How are void methods different, or why I can't call a void method, when an int method works fine?
为什么可以在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您只能在全局范围内定义、声明和初始化变量/函数/结构/类,而不能进行其他任何操作。
相关文章:
- 如何在C++中使用 void* 在指针作为对方法的引用传递时保存uint32_t的值
- 如何将变量的值安全地传递给C++方法,该方法只将void*作为参数
- 用非零值初始化void指针的正确(或最安全)方法
- 退出c++中的递归void方法
- Arduino trim() 和 replace() 方法返回从 'void' 到非标量类型'String'请求的转换
- 什么是 'R(*pf)(void*, Args..)',函数指向方法的指针?
- 回调方法显示错误,类型为"void(*)"的值不能用于初始化类型的实体
- 将 void* 强制转换为多个继承类的超类不会调用正确的方法
- 指向类模板方法的 void 指针的向量
- 将 void* 强制转换为特定类型的指针的方法签名
- 来自 void 指针的虚拟方法表
- 使用 void 方法将字符串从 txt 文件检索到 int C++的向量
- 将带有参数的void方法传递给使用std ::函数和std :: bind c 的另一种方法
- 如何修复空虚拟方法的"warning: no return statement in function returning non-void [-Wreturn-type]"
- CRTP和返回void的方法*
- 为什么不允许虚方法返回 void 指针
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?
- void f()=0是一个虚拟方法
- 将 C++ 对象强制转换为 void* 的安全/标准方法
- 从方法返回 void 以防止执行