(extrait de accéléré C++)Le code ne compile pas à cause de blocs anonymes imbriqués?
Pourquoi le code suivant fonctionne pas:
#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;
}
}
}
Suis-je pas le droit de nid blocs anonymes en C++? Lorsque vous essayez de compiler la source, gcc me donne l'erreur suivante (que je ne peux faire aucun sens de):
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
Quelle (s) commande (s) utilisez-vous pour compiler et lier ceci? En outre, si vous supprimez le "bloc anonyme", avez-vous toujours l'erreur? –
L'erreur semble être dans votre environnement de construction, pas dans votre code. S'il vous plaît poster quelques informations sur votre IDE et la configuration du bâtiment (un makefile?) Et la commande de construction générée (vous pourriez le voir dans une console juste avant la sortie que vous avez posté). – Kos
À quoi ressemblerait un bloc nommé (non anonyme)? :) – fredoverflow