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
Author: Josemi
Date: Thu, 23 Sep 2010 09:32
Date: Thu, 23 Sep 2010 09:32
49 lines
2330 bytes
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
Author: Zephryn Xirdal
Date: Sat, 25 Sep 2010 15:45
Date: Sat, 25 Sep 2010 15:45
66 lines
2711 bytes
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