[C con Clase] Problemas con inline al linkar

Ferran Ferri ferranferri en gmail.com
Mar Sep 16 11:00:59 CEST 2008


Lo curioso es que la unica diferencia para que funcione es poner o quitar el
keyword inline: te paso los fragmentos de codigo:

SDL_Window.h
==============

#ifndef _CSDL_WINDOW_H_
#define _CSDL_WINDOW_H_

class CSDL_Window
{
protected:

    bool    m_ApplicationFinished;

public:
/* Asi si funciona */
/*
    bool IsApplicationFinished()
    {
        return m_ApplicationFinished;
    }
*/
/* Asi no funciona */
inline bool IsApplicationFinished();
};

#endif //_CSDL_WINDOW_H_

================================================

SDL_window.cpp
=============
#include "SDL_Window.h"

bool CSDL_Window::IsApplicationFinished()
{
    return m_ApplicationFinished;
}

===============================================

En resumen: si le quito el keywor inline, funciona perfectamente. Si
implemento la funcion en el fichero de cabecera (para hacerlo inline),
funciona perfectamente. Pero solo con el keyword inline implementando la
funcion en dos partes (.h + .cpp) no linka bien

Quizas tenga que probar con GCC para ver si lo acepta bien y es una cuestion
de VC++.

Por otro lado, y si es problema del linker, se me ocurre otra idea loca.
Puede ser que al hacer esto:


#ifndef _CSDL_WINDOW_H_
#define _CSDL_WINDOW_H_

me cierre las puertas para un inline? La substitucion se produce como si
fuera una macro, es decir, en la compilacion, pero quizas con estas
salvaguardas, no me deja volver a definir la clase, con lo que es posible
que ya no me deje hacer la substitucion de funciones inline. Puede ser?

2008/9/16 Salvador Pozo <salvador en conclase.net>

> El pasado 2008-09-14 22:06:21, Ferran Ferri escribió:
>
> FF> Hola.
>
> Hola:
>
> FF> En una clase meti una funcion inline mediante el keywaord 'inline'.
> Esta
> FF> funcion simplemente devuelve un booleano de la clase (atributo
> privado). En
> FF> el fichero .h puse:
> FF> inline bool IsApplicationRunning();
> FF> Y en el .cpp puse:
> FF> bool CApp::IsApplicationRunning()
> FF> {
> FF>     return m_bApplicationRunning;
> FF> }
> FF> El caso es que sin el inline compila perfectamente y definiendo la
> funcion
> FF> dentro del .h (con lo que seria inline), tambien pero con el inline me
> da un
> FF> error de linkaje (unresolved external symbol)
> FF> Mi IDE es un VC++ 2005. Existe algun parametro del linkador/compilador
> que
> FF> controla esto? O es algun problema generico de inline? Me dais alguna
> pista?
>
> No puedo estar seguro sin ver el código que has usado, pero me da la
> impresión de que has cometido algún error en la definición de la función.
> Debería funcionar de ambas formas.
>
> Si el error está en la fase de enlazado, probablemente hay un error, de
> modo que en lugar de una definición de función de la clase CApp, estás
> definiendo otra cosa. El compilador no se queja porque asume que estás
> definiendo un identificador externo (declarado en otro fichero fuente), pero
> el enlazador no encuentra ese identificador, y da un error.
>
> Repasa las declaraciones, y si no encuentras en problema, envía parte del
> código.
>
> Hasta pronto.
>
> --
> Salvador Pozo (Administrador)
> mailto:salvador en conclase.net
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080916/58eb4814/attachment.html>


Más información sobre la lista de distribución Cconclase