Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: SARGE553413 en 31 Agosto 2014, 19:07 pm



Título: ¿Qué es este warning?
Publicado por: SARGE553413 en 31 Agosto 2014, 19:07 pm
Hola a todos.

Estoy compilando un programa escrito en C++/CLI y me sale un warning que no entiendo:

Código:
a firma de un miembro no privado contiene un tipo privado de ensamblado de 'X'
vea la declaración de 'X'

No entiendo por qué sale este warning, por más que miro no veo ningún atributo ni método private que esté siendo usado como public.

¿Alguien sabe que ocurre?

Saludos, gracias.


Título: Re: ¿Qué es este warning?
Publicado por: Eleкtro en 31 Agosto 2014, 19:59 pm
El aviso dice no privado, no dice que la declaración deba ser 'Public', también podría ser otra declaración visible como 'Friend'.

según parece, intuyo que estás intentando parametizar un Type en la firma de algún método (u otro miembro, como podría ser un delegado) pero te está sugeriendo que no hagas visible dicho miembro ya que el Type de su firma no se podrá exponer al ser privado,
en inglés ayudaría más a entender el mensaje de error.

¿No te indica la linea donde se encuentra la firma del miembro que produce el conflicto?.

¿No puedes modificar la visibilidad de 'X?.

Postea el código de "X".

PD: Te sugiero usar la IDE en inglés, no vas a encontrar información para resolver warnings/errors en Castellano.

saludos!


Título: Re: ¿Qué es este warning?
Publicado por: SARGE553413 en 31 Agosto 2014, 23:52 pm
EDIT: Antes de leer todo el tocho de abajo, he probado a, en lugar de poner public a todas las clases, quitárselo a todas y parece que funciona pero sigo sin entender que pasa. Ahora solo me quedan warnings de 'variable local sin referencia', pero son de excepciones que capturo y re-creo con el mensaje que yo quiero, así que no creo que eso sea muy grave.

según parece, intuyo que estás intentando parametizar un Type en la firma de algún método (u otro miembro, como podría ser un delegado) pero te está sugeriendo que no hagas visible dicho miembro ya que el Type de su firma no se podrá exponer al ser privado,
en inglés ayudaría más a entender el mensaje de error.

No se exactamente a qué te refieres, pero este warning me sale (entre otras cosas) en las líneas que son las cabeceras de algunos métodos (y como parámetros paso otras clases, no se si te refieres a esto con 'parametrizar')

¿No te indica la linea donde se encuentra la firma del miembro que produce el conflicto?.

Sí, pero son muchas, unas 50 o más.

¿No puedes modificar la visibilidad de 'X?.

¿De la clase 'X'? He probado a ponerles 'public' a todas las clases, pero lo mismo.

Postea el código de "X".

Es muy largo, intentaré quitar lo que no sea importante para este caso: (indico en qué línea sale el warning)

Warning en cuestión: 'ChangeSpeed': la signatura de un miembro no privado contiene un tipo privado de ensamblado de 'motor'
1>          e:\mis documentos\...\motor.h(30) : vea la declaración de 'motor'
Código:
#pragma once

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// Resumen de ChangeSpeed
/// </summary>
public ref class ChangeSpeed : public System::Windows::Forms::Form
{
public:
ChangeSpeed(motor ^m) //<=====Línea 16 (Warning)
{
InitializeComponent();
//
//TODO: agregar código de constructor aquí
//
}
.....
};

Código:
ref class motor
{ //<==== Línea 30 (Warning)
public:
static motor^ getInstance();

        ....
        ....
};
#endif

PD: Te sugiero usar la IDE en inglés, no vas a encontrar información para resolver warnings/errors en Castellano.

Warning en inglés:
signature of non-private member contains assembly private native typ

He buscado info en la web de microsoft, pero sigo sin entender que es es de la "firma" o "signatura" de una clase...

Saludos, y gracias.


Título: Re: ¿Qué es este warning?
Publicado por: Eleкtro en 1 Septiembre 2014, 06:14 am
Viendo el código me doy cuenta que no te puedo ayudar mucho más, mi entendimiento de C++ es poco, pero el aporte del código servirá para captar la atención de alguno que esté mejor entendido que yo,
de todas formas quizás el problema vaya por > este (http://stackoverflow.com/questions/1197106/static-constructors-in-c-need-to-initialize-private-static-objects) < camino.

PD: Por parametizar me refería a usar la Class "motor" como parámetro en la firma de "X" miembro.

EDITO:

He buscado info en la web de microsoft, pero sigo sin entender que es es de la "firma" o "signatura" de una clase...

Cita de: http://msdn.microsoft.com/en-us/library/aa691131%28v=vs.71%29.aspx
The signature of an instance constructor consists of the type and kind (value, reference, or output) of each of its formal parameters, considered in the order left to right. The signature of an instance constructor specifically does not include the params modifier that may be specified for the right-most parameter.

Saludos!


Título: Re: ¿Qué es este warning?
Publicado por: 6666 en 1 Septiembre 2014, 07:19 am
Como que tendrías que declarar las funciones fuera de los miembros, y luego llamar a la función respecto a los permisos.
y referirte a el correctamente:

pseudo code:

public ref class ChangeSpeed : public System::Windows::Forms::Form
   {
private:
char m_numbers[type];
int suma;

public:
void ChangeSpeedexample(motor ^m);
int ChangeSpeedexample2(int);
         }


void ChangeSpeed::ChangeSpeedexample2(String^ type, String^ number)
{
    m_numbers[type] = number;
}

void ChangeSpeed::ChangeSpeedexample(motor ^m) {
         InitializeComponent();
         //
         //TODO: agregar código de constructor aquí
         //
}      

ChangeSpeed^ p = ref new ChangeSpeedexample("un ejemplo");
p->ChangeSpeedexample2("sa");