为什么我不能添加到方法/函数外部的 ostringstream
Why can't I add to a ostringstream outside a method/function
如果我在方法或winmain之外使用此代码:
ostringstream vertexid;
vertexid << "bob";
vertexid << " ";
vertexid << " ";
vertexid << 48348093490;
我收到各种语法错误。 范围如何发挥作用,为什么会发生这种情况?
你可以做这样的事情:
std::ostringstream ss;
#define nil(x) ((x), 0)
int x = nil(ss << "Hello");
int y = nil(ss << ", World!");
int z = nil(ss << std::endl);
如果你真的不喜欢想变量名,那么你可以做一些更疯狂的事情:
#define nilPASTE(x, y) x ## y
#define nilPASTE2(x, y) nilPASTE(x, y)
#define nil2(x) static int nilPASTE2(line_, __LINE__) = nil(x)
nil2(ss << "Goodbye");
nil2(ss << ", Sun!");
nil2(ss << std::endl);
你问:
范围如何发挥作用,为什么会发生这种情况?
我假设您提到范围,因为这是一些错误消息吐出的内容。但是这个问题的答案是,C++编译器遵循C++语言的规则,它不允许语句出现在任何地方。它们只能出现在允许的位置,即函数和方法主体中。允许使用我的技术的原因是因为我正在使用表达式,并且表达式可以出现在更多地方。特别是,允许它们出现在变量的初始值设定项中。当然,在翻译单元的最外层允许使用变量声明。
所有这些咕噜咕噜的意思是:把你的语句放在函数和方法中。
您只能在全局范围内声明或定义内容。
仅第一行就可以了(在实现文件中...如果在标题中,您可能会有多个定义,并且需要将其声明为 extern
而不是定义它),接下来的行是不合法的。
在全局命名空间中,您不能有代码,因为何时应该执行它?您只能将可执行语句放在函数中,例如 WinMain
/main
.
执行从 WinMain
/main
开始,然后您可以从那里调用其他函数。
相关文章:
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- C++:函数外部的超时功能
- 如何在函数外部访问函数中局部变量的值?
- 在成员函数外部封闭类的定义中需要默认成员初始值设定项
- 以延长构造函数外部 QT 对象的生存期
- 全局静态变量不"staying defined"函数外部
- C++ 函数外部丢失的指针对象
- 向量大小在构造函数外部恢复为 0
- 删除函数外部的实例化对象
- 在函数外部编写代码
- 为什么我不能添加到方法/函数外部的 ostringstream
- 用于在方法或函数外部声明的变量的内存
- SDL2 在函数外部加载字体会引发错误
- 如何在具有多态性的函数外部创建对象
- 在函数外部声明对象,将其作为引用传递,然后在函数内部创建它
- 向量未在函数C++外部更新
- 访问函数外部的堆栈对象
- 在c++中访问函数外部的数组
- 如何更新函数外部的数组(指向指针)