2010-03-12 10 views
5

mi código esC conflicto de advertencia tipos

void doc(){ 
      //mycode     
      return; 
      } 

mi advertencia es

conflicting types for 'doc' 

cualquiera puede resolverlo.

+1

Probablemente tenga definido un 'documento' más en alguna parte, verifique sus inclusiones, el mensaje de error debería decirle dónde está la declaración en conflicto. – falstro

Respuesta

3

Claramente no es su código completo.

Sin embargo, ese error significa que hay otra declaración para doc (¿quizás una variable global? ¿Algo en un archivo de encabezado?) Que no es una función void que no toma parámetros.

+4

también puede haber usado la función antes de su definición –

+0

Sí, buena captura. Aún así, no completa el código. :) –

3

u han declarado con algún otro tipo/firma y definida con algún otro tipo/firma ..

como

int doc(); 
void doc() 
{ 
} 

dar u esta advertencia.

2

"doc" es probable que ya haya sido declarado con un tipo diferente ... ¡debería intentar encontrar la declaración anterior!

27

En C, si no tiene un prototipo para una función cuando la llama, se supone que devuelve un int y para tomar un número no especificado de parámetros. Luego, cuando más tarde define su función como devolver void y no toma ningún parámetro, el compilador ve esto como un conflicto.

Dependiendo de la complejidad de su código, puede hacer algo tan simple como mover la definición de la función antes de su uso, o agregar la función declaración en un archivo de encabezado e incluirlo.

En cualquier caso, el efecto neto debería ser hacer que el prototipo de función esté disponible antes de que se use.

Si agrega

void doc(void); 

antes de la utilización de función, que tendrá un prototipo visible en su alcance, y su advertencia desaparecerá.

Creo que esta es la causa más probable para su advertencia. Puede tener una declaración explícita incompatible de doc en su código, pero no podemos decirlo porque no ha publicado el código completo.

2

Usted ha declarado ya sea doc antes, o realizado una llamada a no declarada doc forzando así al compilador para deducir una declaración de parámetros probable para doc de esa llamada. Ahora, la definición de doc que citó es diferente de la declaración anterior (ya sea explícita o deducida por el compilador), que es lo que se informa como un "conflicto".

2

¡Asegúrate de no haber usado doc en ningún lugar de tu código! ¡Creo que solo te da problemas!

12

intente escribir su función doc antes de su función principal en su archivo de programa.

+0

Gracias! Cuidado para explicar por qué es esto? – user1072706

+0

Representa la declaración directa de la función y es el prototipo de la función. – Das

0

declarando la función por encima del uso resuelto para mí.

Ejemplo:

void recordAudio(){ //declaration 

    doStuff(); 
} 


void initialise(){ 

    recordAudio(); // usage 
} 

como se puede ver arriba, el uso de recordAudio() está por encima de donde se está utilizado.

+0

podría agregar el código a este – nullpointer

+0

@nullpointer He actualizado mi respuesta con un ejemplo –