Visual C++ .NET - Error: no se admiten tipos mixtos

 
Vista:

Error: no se admiten tipos mixtos

Publicado por kayss (3 intervenciones) el 14/05/2007 13:44:03
Hola,

Os explico mi problema mediante un ejemplo:

Tengo una clase administrada (en este caso, Monitor) y quiero definir un atributo (en este caso, session) que es de un tipo de datos definido en una librería que utilizo. Esta definición de datos, si la hago dentro de uno de los métodos de la clase no da problemas, pero la necesito definir como un atributo de la clase y me dice:

error C4368: no se puede definir 'session' como miembro de 'Monitor' administrado: no se admiten tipos mixtos

Gracias, Juan
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Definición de atributo con tipo de datos externo en clase administrada

Publicado por Alejandro (265 intervenciones) el 30/01/2024 23:34:37
Kayss, en este caso, el error C4368 indica que estás tratando de definir un atributo (`session`) en una clase administrada (`Monitor`) con un tipo de datos que no es permitido en contextos administrados. Los tipos mixtos (managed y unmanaged) no son directamente compatibles en este contexto.

Una solución común para este problema es utilizar un puntero a un tipo de datos no administrado en lugar de tener el tipo directamente como un miembro de la clase. Aquí hay un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <vcclr.h>  // Necesario para el manejo de punteros de C++/CLI
 
using namespace System;
 
// Definición del tipo de datos externo
struct Session
{
    // ... definición de la estructura de la sesión ...
};
 
// Clase administrada
public ref class Monitor
{
private:
    // Utiliza un puntero para referenciar al tipo de datos no administrado
    Session* session;
 
public:
    Monitor()
    {
        // Inicializa el puntero en el constructor
        session = new Session();
    }
 
    // ... otros miembros de la clase ...
};

En este ejemplo, se utiliza un puntero (`Session*`) para referenciar al tipo de datos no administrado (`Session`). Recuerda gestionar adecuadamente la memoria y liberar recursos en el destructor o en otro lugar apropiado.

Ten en cuenta que el manejo de punteros y tipos no administrados en un contexto administrado puede introducir complejidades adicionales, así que asegúrate de comprender completamente las implicaciones de esta solución en tu diseño y aplicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar