Compartir a través de


Advertencia del compilador (nivel 1) C4358

"operator": el tipo de valor devuelto de los delegados combinados no es "void"; el valor devuelto no está definido

Se combinaron dos delegados y el valor devuelto no es nulo. Si se combinan dos delegados con valores devueltos no nulos, el compilador no podrá realizar una asignación adecuada si se usa el valor devuelto del delegado.

El ejemplo siguiente genera la advertencia C4358:

// C4358.cpp
// compile with: /clr /W1
delegate int D();
delegate void E();

ref class X {
   int i;
public:
   X(int ii) : i(ii) {}
   int f() {
      return i;
   }
};

ref class Y {
   int i;
public:
   Y() {}
   void g() {}
};

int main() {
   D^ d = gcnew D(gcnew X(1), &X::f);
   D^ d2 = gcnew D(gcnew X(2), &X::f);

   d += d2;   // C4358
   int j = d();   // return value indeterminate

   E^ e = gcnew E(gcnew Y, &Y::g);
   E^ e2 = gcnew E(gcnew Y, &Y::g);
   e += e2;   // OK
}