由于嵌套的匿名块,代码没有编译?

hel*_*hod 1 c++

(摘自Accelerated C++)

为什么以下代码不起作用:

#include <iostream>
#include <string>

int main() {
    {
        const std::string s = "a string";
        std::cout << s << std::endl;

        {
            const std::string s = "another string";
            std::cout << s << std::endl;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不允许在C++中嵌套匿名块吗?在尝试编译源代码时,gcc给出了以下错误(我无法理解):

hello: In function `_start':
(.text+0x0): multiple definition of
`_start'
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o:(.text+0x0):
first defined here
hello:(.rodata+0x0): multiple
definition of `_fp_hw'
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o:(.rodata+0x0):
first defined here hello: In function
`_fini': (.fini+0x0): multiple
definition of `_fini'
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crti.o:(.fini+0x0):
first defined here
hello:(.rodata+0x4): multiple
definition of `_IO_stdin_used'
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o:(.rodata.cst4+0x0):
first defined here hello: In function
`__data_start': (.data+0x0): multiple
definition of `__data_start'
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o:(.data+0x0):
first defined here hello: In function
`__data_start': (.data+0x4): multiple
definition of `__dso_handle'
/usr/lib/gcc/i486-linux-gnu/4.4.3/crtbegin.o:(.data+0x0):
first defined here hello: In function
`_init': (.init+0x0): multiple
definition of `_init'
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crti.o:(.init+0x0):
first defined here /tmp/cchh83A6.o: In
function `main':
hello.cpp:(.text+0x0): multiple
definition of `main'
hello:(.text+0xb4): first defined here
/usr/lib/gcc/i486-linux-gnu/4.4.3/crtend.o:(.dtors+0x0):
multiple definition of `__DTOR_END__'
hello:(.dtors+0x4): first defined here
/usr/bin/ld: warning: Cannot create
.eh_frame_hdr section, --eh-frame-hdr
ignored. /usr/bin/ld: error in
hello(.eh_frame); no .eh_frame_hdr
table will be created. collect2: ld
returned 1 exit status

cri*_*ian 6

该代码工作正常.请参阅此处编译您的代码(您的环境有问题)