Sto ricevendo un sacco di "ridefinizione di x .... x precedentemente definito qui". Per favore, cosa significa questo errore?Errore del compilatore GCC: "ridefinizione ... precedentemente definita"
risposta
Probabilmente stai includendo un file di intestazione due volte. Assicurati che i tuoi file di intestazione siano contornati dalle dichiarazioni #ifndef
.
http://www.fredosaurus.com/notes-cpp/preprocessor/ifdef.html
è necessario limitare ogni file venga incluso solo una volta. Puoi farlo in 2 modi.
1) Nella parte superiore del file di intestazione messo:
#pragma once
o 2) se il compilatore non supporta questo, mettere in cima/fine del file di intestazione:
#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif
Sostituisci MYFILE con il nome del file e sostituisci ... con il contenuto del file di intestazione.
L'errore indica che c'è un simbolo che è stato definito in un posto e una definizione alternativa è stata effettuata in un altro luogo.
Ciò può verificarsi se in casi come:
- se definite due funzioni con lo stesso nome
- se v'è una mancata corrispondenza tra una funzione e prototipo
- si chiama un non banale funzione prima che sia stata definita e senza un prototipo
In questo ultimo caso ci sarà una mancata corrispondenza tra la funzione reale e la "dichiarazione implicita" che il compilatore assume s quando non ha un prototipo da usare.
Queste situazioni possono essere evitati:
- Garantire che i prototipi di funzione sono dichiarati solo una volta
- Assicurare che tutte le funzioni hanno nomi unici nel loro ambito (ad esempio all'interno di un file se sono
static
o. Univoco se vengono utilizzati tra file oggetto) - Fare attenzione se si utilizzano le istruzioni
extern
nei file di origine per dichiarare i prototipi. Meglio usare un prototipo dal file di intestazione appropriato. - Verificare che tutte le funzioni abbiano prototipi: all'interno del file di origine nel caso delle funzioni
static
o in un file di intestazione se devono essere utilizzati da altri file oggetto. - garantire che tutti i file di intestazione possono essere inclusi solo una volta per ogni file sorgente, utilizzando uno dei costrutti suggerite da Mehrdad e Brian R. Bondy
- 1. Errore del compilatore interno GCC: errore di segmentazione
- 2. errore C2011: '': 'classe del tipo' ridefinizione
- 3. Disabilita temporaneamente l'avviso gcc sulla ridefinizione
- 4. errore di ridefinizione timespec
- 5. Errore del compilatore ArrayList
- 6. pycrypto su Ubuntu con errore del compilatore
- 7. C errore del compilatore: cdefs.h non trovato
- 8. Errore del compilatore interno VC++
- 9. Errore del compilatore Java generics
- 10. Errore del compilatore C++ ambiguo
- 11. Errore del pre-compilatore Android?
- 12. Extern del compilatore di chiusura - AVVISO - Proprietà non definita su
- 13. Errore C2011: 'MSXML2 :: IXMLDOMImplementation': 'struct' tipo ridefinizione
- 14. Utilizzo di typecasting per rimuovere gli avvisi del compilatore gcc
- 15. Come reindirizzare l'output del compilatore gcc in un file?
- 16. Errore del compilatore GCC durante l'estrazione di un carattere da un flusso temporaneo
- 17. Errore di assembler dell'espressione non definita
- 18. Objective-C Macro ridefinizione
- 19. Ritorno alle origini - C# Errore del compilatore
- 20. Errore del compilatore in F # 4?
- 21. Errore del compilatore usando l'operatore condizionale C#
- 22. g ++ Errore del compilatore 4.6.1: Errore: pseudo-op sconosciuto: `.cfi_personality '
- 23. errore di ridefinizione in file di intestazione sistema a causa di "signed char" e "char"
- 24. profondità di inlining in compilatore GCC
- 25. ridefinizione della promessa
- 26. Ridefinizione delle costanti in PHP
- 27. Tipo conversione del & sé provoca errore del compilatore
- 28. Errore del compilatore "Ambiguo uso del prefisso" con Swift 3
- 29. dynamic_cast sul compilatore clang llvm in errore
- 30. C Errore # compilatore CS0433
Credo che #pragma funziona solo in VC++, non in gcc . Il trucco #define è portatile. – Gorpik
soppresso da gcc e vC++ –
Wikipedia dice che #pragma una volta è supportato da VC++ e gcc http://en.wikipedia.org/wiki/Pragma_once. –