如何使用复合语句或块

时间:2014-05-28 05:01:36

标签: c++

我尝试使用复合语句如下:

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.

2 个答案:

答案 0 :(得分:2)

复合语句只能在函数或方法中使用。

如果我记得很清楚,这是一个语句的特殊情况,也是语法中函数体'fct-body'的一部分。

答案 1 :(得分:1)

命名空间内没有直接的语句,更不用说复合语句了。

你只能在那里有声明。您可以声明一个包含语句的函数,或者使用带有初始值的声明,这可以像语句一样执行操作。

在您的示例中,复合语句中的“语句”是声明,因此不清楚您希望额外的大括号有什么区别。

注意,像示例foo这样的函数定义不是有效的声明语句。