2009-04-02 17 views

risposta

27

è 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.

+1

Credo che #pragma funziona solo in VC++, non in gcc . Il trucco #define è portatile. – Gorpik

+0

soppresso da gcc e vC++ –

+0

Wikipedia dice che #pragma una volta è supportato da VC++ e gcc http://en.wikipedia.org/wiki/Pragma_once. –

10

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
Problemi correlati