obligada > comp.lenguajes.* > comp.lenguajes.cpp

Josemi (23-09-2010, 11:32)
¡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
Zephryn Xirdal (25-09-2010, 17:45)
On Thu, 23 Sep 2010 11:32:38 +0200, Josemi <josemiantelo> wrote:

[..]
> 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".
Temas Similares