¿Qué es este warning?

Iniciado por SARGE553413, 31 Agosto 2014, 19:07 PM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

Hola a todos.

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


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.

Eleкtro

#1
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!








SARGE553413

#2
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.

Cita de: Eleкtro en 31 Agosto 2014, 19:59 PM
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')

Cita de: Eleкtro en 31 Agosto 2014, 19:59 PM
¿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.

Cita de: Eleкtro en 31 Agosto 2014, 19:59 PM
¿No puedes modificar la visibilidad de 'X?.

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

Cita de: Eleкtro en 31 Agosto 2014, 19:59 PM
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'

#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í
//
}
.....
};



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

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


Cita de: Eleкtro en 31 Agosto 2014, 19:59 PM
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.

Eleкtro

#3
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 < camino.

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

EDITO:

Cita de: SARGE553413 en 31 Agosto 2014, 23:52 PMHe 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.aspxThe 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!








6666

#4
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");