Hola:
Estoy empezando C# y me ha surgido un problema a la hora de poner como miembro de una clase a un puntero de otra clase.
El caso es que en un archivo "Archivo1.cs" tengo definida la clase "Clase1" del siguiente modo
namespace Proyecto
{
class Clase1
{
...
}
}
Y en un segundo archivo "Archivo2.cs" tengo definida la segunda clase "Clase2", la cual tiene como miembro a un puntero de Clase1
namespace Proyecto.Subproyecto
{
class Clase2
{
Clase1* m_pClase1;
}
}
Al intentar compilar esto me he encontrado con el siguiente mensaje de error:
"Pointers and fixed size buffers may only be used in an unsafe context"
Tras investigar un rato he visto que los punteros en C# son peligrosos y que debemos marcarlos como unsafe.
Así que he cambiado el código tal que así:
namespace Proyecto.Subproyecto
{
class Clase2
{
unsafe Clase1* m_pClase1;
}
}
(También he probado con el unsafe en otras posiciones)
Pero me seguía sin compilar, pero ahora me aparecía otro mensaje de error
"Cannot take the addres of, get the size of, or declare a pointer to a manage type"
He estado revisando documentación y me he encontrado con que este error solo pasa con las clases propias, por ejemplo, si cambio
unsafe Clase1* m_pClase1;
por
unsafe int* m_pClase1;
me compila correctamente.
Lo que me lleva a preguntarme si sera que no estoy "incluyendo" lo que debería y simplemente no encuentra Clase1.
Viendo esto he intentado hacer
unsafe Proyecto.Clase1* m_pClase1;
pero tampoco me funciona.
Puede que este demasiado acostumbrado a C++ y en C# hay una alternativa mejor a los punteros.
Alguien me puede decir cual cree que es el problema y tiene alguna idea/alternativa para resolverlo?
Como estoy seguro de que estoy "incluyendo" un archivo?
Muchas gracias!