开发者

Code's not compiling because of nested anonymous blocks?

(Taken from Accelerated C++)

Why does the following code not work:

#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;
        }
    }
}

Am I not allowed to nest anonymous blocks in C++? When trying to compile the source, gcc gives me the following error (which I can't make any sense of):

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 `__D开发者_JS百科TOR_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


That code works fine. See here Your code compiled (You have a problem with your environment)


You appear to be linking against 2, or more, object files (or .a files) that define the same things. If you link against one or the other your linker problem will go away.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜