2011-09-23 7 views
9

Tengo problemas para compilar algún código C. Cuando compilo, I'l sale este error:Error de compilación GCC C, no se ignora el valor vacío ya que debería ser

player.c: In function ‘login’: 
player.c:54:17: error: void value not ignored as it ought to be 

Este es el código para el error:

static bool login(const char *username, const char *password) { 
    sp_error err = sp_session_login(g_sess, username, password, remember_me); 
    printf("Signing in...\n"); 
    if (SP_ERROR_OK != err) { 
     printf("Could not signin\n"); 
     return 0; 
    } 
    return 1; 
} 

Cualquier manera de evitar este tipo de error?
Gracias

Editar: Todas las funciones son de sp_ libspotify

+3

muestran la declaración de 'sp_session_login()'. –

+0

¿Tiene bool definido en C? No es una buena práctica. – Cartesius00

+0

Si usa 'clang', es posible que obtenga mejores mensajes de error. –

Respuesta

8

¿Dónde está exactamente la línea de error?

Sin más información, yo supongo que es aquí:

sp_error err = sp_session_login(g_sess, username, password, remember_me); 

supongo sp_session_login está regresando el vacío.

Probar:

static bool login(const char *username, const char *password) { 
    sp_session_login(g_sess, username, password, remember_me); 
    printf("Signing in...\n"); 
    return 1; 
} 
+2

Confirmado, 'sp_session_login' es una función' void': https://developer.spotify.com/docs/libspotify/11.1.60/group__session.html –

8

lo general, significa que asigne el retorno de una función void a algo, que por supuesto es un error.

En su caso, supongo que la función sp_session_login es nula, de ahí el error.

2

Voy a suponer que sp_session_login se declara como void y no sp_error y hay alguna forma alternativa de determinar si tuvo éxito.

2

No parece que sp_session_login realmente devuelve algo. En particular, no devuelve un sp_error, por lo que no hay forma de que esto funcione. Realmente no puedes evitarlo.

-1

Debe declarar funciones vacíos delante de ellos utilizan. Intente ponerlos antes de la función principal o antes de sus llamadas. Hay una acción más que puede hacer: Puede decirle al compilador que usará las funciones anuladas.

Por exemplo, hay dos maneras de hacer la misma cosa:

#include <stdio.h> 

void showMsg(msg){ 
    printf("%s", msg); 
} 

int main(){ 
    showMsg("Learn c is easy!!!"); 
    return 0; 
} 

... y la otra manera:

#include <stdio.h> 

void showMsg(msg); //Here, you told the compiller that you will use the void function showMsg. 

int main(){ 
    showMsg("Learn c is easy!!!"); 
    return 0; 
} 

void showMsg(msg){ 
    printf("%s", msg); 
} 
+2

Esto no responde la pregunta. * Todas las funciones * deben declararse antes del uso (C99 requiere esto, y es una buena práctica en C90).El OP ya declaró 'sp_session_login' by' # include'ing el encabezado apropiado; así es como el compilador sabe que es una función 'nula'. El problema es que el OP intentó asignar el resultado inexistente de una función 'void' a una variable; su respuesta no aborda el problema real. –

Cuestiones relacionadas