🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.lenguajes.c++
2 messages
2 total messages Started by Josemi Thu, 23 Sep 2010 09:32
Static miembros de una clase en una dll
#190
Author: Josemi
Date: Thu, 23 Sep 2010 09:32
49 lines
2330 bytes
¡Hola!

  Me ha pasado un caso curioso con una clase que tiene un miembro
static definida en una dll. Me explico

dll.h

class __declspec (dllexport) A
{
   public:
     static  int    valor;

    PinrtOut ()
    {
       TRACE1(valor);
    }
}

dll.cpp
A::valor=23;

main.h
class B:A
{
}

main.cpp
A::valor;
{
   A   objeto;

   objeto.valor = 34;
   objeto.PrintOut();
}

Bien, sucede que el valor dado en "main.cpp" valor objeto.valor = 34
cuando entra en PrintOut ésta imprime 23

¿Se te ocurre a que es debido? aunque tengo alguna idea y el problema
radica en que estoy obligado a declarar A::valor en las dos rutinas y
claro el compilador crea dos instancias de A::valor ¿se podría hacer
que él solo viera una? o alguna idea de como solventar este problema.
Se me ocurren definir rutinas que suplan esta deficiencia, pero yo
buscaba algo menos complicado.


Un millón de gracias

Josemi
Re: Static miembros de una clase en una dll
#191
Author: Zephryn Xirdal
Date: Sat, 25 Sep 2010 15:45
66 lines
2711 bytes
On Thu, 23 Sep 2010 11:32:38 +0200, Josemi <josemiantelo@gmail.com> wrote:

> �Hola!
>
>   Me ha pasado un caso curioso con una clase que tiene un miembro
> static definida en una dll. Me explico
>
> dll.h
>
> class __declspec (dllexport) A
> {
>    public:
>      static  int    valor;
>
>     PinrtOut ()
>     {
>        TRACE1(valor);
>     }
> }
>
> dll.cpp
> A::valor=23;
>
> main.h
> class B:A
> {
> }
>
> main.cpp
> A::valor;
> {
>    A   objeto;
>
>    objeto.valor = 34;
>    objeto.PrintOut();
> }
>
> Bien, sucede que el valor dado en "main.cpp" valor objeto.valor = 34
> cuando entra en PrintOut �sta imprime 23
>
> �Se te ocurre a que es debido? aunque tengo alguna idea y el problema
> radica en que estoy obligado a declarar A::valor en las dos rutinas y
> claro el compilador crea dos instancias de A::valor �se podr�a hacer
> que �l solo viera una? o alguna idea de como solventar este problema.
> Se me ocurren definir rutinas que suplan esta deficiencia, pero yo
> buscaba algo menos complicado.
>
>

Porque el A::valor que declaras en main es diferente y oculta al A::valor  
de la DLL.

De todos modos ese c�digo no creo que compile tal y como lo pones.

Pon "extern" delante del "A::valor".

> Un mill�n de gracias
>
> Josemi


-- 
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
El hombre no vive de otra cosa que de religi�n o de ilusiones.
		-- Giacomo Leopardi. (1798-1837) Poeta italiano.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads