我尝试使用复合语句如下:
namespace A
{
namespace B
{
{ //compound statement started here
void foo()
{
printf("%d\n",i);
}
int i=5;
} //ended here
}
}
int main(){ }
但是我有一个编译时错误:
test.cpp:7:3: error: expected unqualified-id before ‘{’ token
test.cpp:19:1: error: expected ‘}’ at end of input
test.cpp:19:1: error: expected ‘}’ at end of input
但我希望它没问题。这是因为复合语句定义为:
compound-statement:
{ statement-seq_opt }
at 6.3 / 1.
答案 0 :(得分:2)
复合语句只能在函数或方法中使用。
如果我记得很清楚,这是一个语句的特殊情况,也是语法中函数体'fct-body'的一部分。
答案 1 :(得分:1)
命名空间内没有直接的语句,更不用说复合语句了。
你只能在那里有声明。您可以声明一个包含语句的函数,或者使用带有初始值的声明,这可以像语句一样执行操作。
在您的示例中,复合语句中的“语句”是声明,因此不清楚您希望额外的大括号有什么区别。
注意,像示例foo
这样的函数定义不是有效的声明语句。