(von Accelerated C++ Taken)Code wird wegen verschachtelter anonymer Blöcke nicht kompiliert?
Warum wird der folgende Code funktioniert nicht:
#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;
}
}
}
Bin ich zu nisten anonyme Blöcke in C++ nicht erlaubt? Beim Versuch, die Quelle zu kompilieren, gibt gcc mir folgende Fehler (die ich keinen Sinn machen kann):
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
Mit welchen Befehlen kompilieren und verknüpfen Sie diese? Auch wenn Sie den "anonymen Block" entfernen, haben Sie immer noch den Fehler? –
Der Fehler scheint in Ihrer Build-Umgebung zu liegen, nicht in Ihrem Code. Bitte poste ein paar Infos über deine IDE und dein Setup (ein Makefile?) Und den generierten Baubefehl (du kannst es in einer Konsole sehen, kurz bevor du die Ausgabe gepostet hast). – Kos
Wie würde ein benannter (nicht anonymer) Block aussehen? :) – fredoverflow