Compartir a través de


Error del compilador C2660

'función' : la función no acepta número parámetros

Se llama a la función con un número incorrecto de parámetros.

Puede producirse el error C2660 si se llama accidentalmente a una función de la API de Windows en lugar de llamar a una función miembro MFC del mismo nombre. Para solucionar este problema:

  • Ajuste la llamada de función para que siga el formato de la llamada a función miembro.

  • Utilice el operador de resolución de ámbito (::) para indicar al compilador que realice una búsqueda del nombre de función en el espacio de nombres global.

Ejemplos

El ejemplo siguiente genera el error C2660.

// C2660.cpp
void func( int, int ) {}

int main() {
   func( 1 );   // C2660 func( int ) not declared
   func( 1, 0 );   // OK
}

Este error también puede producirse si se intenta llamar directamente al método Dispose de un tipo administrado. Para obtener más información, consulte Destructores y finalizadores. El ejemplo siguiente genera el error C2660.

// C2660_a.cpp
// compile with: /clr
using namespace System;
using namespace System::Threading;

void CheckStatus( Object^ stateInfo ) {}

int main() {
   ManualResetEvent^ event = gcnew ManualResetEvent( false );
   TimerCallback^ timerDelegate = gcnew TimerCallback( &CheckStatus );
   Timer^ stateTimer = gcnew Timer( timerDelegate, event, 1000, 250 );

   stateTimer->Dispose();   // C2660
   stateTimer->~Timer();   // OK
}

Se producirá el error C2660 si una clase derivada oculta una función.

// C2660b.cpp
// C2660 expected
#include <stdio.h>

class f {
public:
   void bar() {
      printf_s("in f::bar\n");
    }
};

class f2 : public f {
public:
   void bar(int i){printf("in f2::bar\n");}
   // Uncomment the following line to resolve.
   // using f::bar;   // - using declaration added
   // or
   // void bar(){__super::bar();}
};

int main() {
   f2 fObject;
   fObject.bar();
}

Puede producirse el error C2660 si se invoca una propiedad indizada de forma incorrecta.

// C2660c.cpp
// compile with: /clr
ref class X {
   double d;
public:
   X() : d(1.9) {}
   property double MyProp[] {
      double get(int i) {
         return d;
      }
   }   // end MyProp definition
};

int main() {
   X ^ MyX = gcnew X();
   System::Console::WriteLine(MyX->MyProp(1));   // C2660
   System::Console::WriteLine(MyX->MyProp[1]);   // OK
}

Puede producirse el error C2660 si se invoca una propiedad indizada de forma incorrecta.

// C2660d.cpp
// compile with: /clr
ref class A{
public:
   property int default[int,int] {
      int get(int a, int b) {
         return a + b;
      }
   }
};

int main() {
   A^ a = gcnew A;
   int x = a[3][5];   // C2660
   int x2 = a[3,5];   // OK
}

Puede producirse el error C2660 si se define un nuevo operador en una clase de plantilla, pero el nuevo operador crea en dicha clase un objeto cuyo tipo es distinto al del tipo envolvente.

// C2660e.cpp
// compile with: /c
#include <malloc.h>

template <class T> class CA {
private:
    static T** line;
   void* operator new (size_t, int i) {
      return 0;
   }
   void operator delete(void* pMem, int i) {
      free(pMem);
   }

public:
   CA () { new (1) T(); }   // C2660
   // try the following line instead
   // CA () { new (1) CA<int>(); }
};

typedef CA <int> int_CA;

void AAA() {
   int_CA  list;
}