Error del compilador C2491 al intentar definir miembros de datos como funciones dllimport
Este artículo le ayuda a resolver el error del compilador C2491 que se produce al intentar definir miembros de datos como dllimport funciones.
Versión original del producto: Visual C++
Número de KB original: 815647
Síntoma
No se puede aplicar la __declspec(dllimport) palabra clave para implementar una función. Por ejemplo, al intentar definir miembros de datos (incluidos los miembros de datos estáticos y las funciones) como dllimport funciones, recibe el siguiente mensaje de error del compilador C2491:
'identifier': no se permite la definición de la función dllimport
Causa y resolución
Solo puede aplicar la __declspec(dllimport) palabra clave a las declaraciones. No se puede aplicar la __declspec(dllimport) palabra clave para implementar funciones. El propósito de esta palabra clave es declarar la implementación de una función mediante un archivo DLL. De forma similar, si aplica la __declspec(dllimport) palabra clave a un miembro de datos, recibirá los datos iniciales de un archivo DLL. Por lo tanto, no se puede asignar un valor en el código inicialmente.
Recibe el error del compilador C2491 al intentar compilar el código siguiente:
// function definition
void __declspec(dllimport) funcB()
{
// error C2491: 'funcB' : definition of dllimport function not allowed
}
Este comportamiento se produce porque ha definido la implementación de la función como dllimport. Para evitar este error del compilador, no defina la función, sino que declare la función de la siguiente manera:
// function declaration
void __declspec(dllimport) funcB(); // ok
int main()
{
}
Del mismo modo, recibe el error C2491 del compilador al intentar compilar el código siguiente:
//defining data member
extern __declspec(dllimport) int code = 1;
// error C2491: 'code' : definition of dllimport data not allowed
Recibe este mensaje de error porque definió el miembro de datos como dllimport. Para evitar este error del compilador, no defina el miembro de datos, sino que declare el miembro de datos como se indica a continuación:
// declaring data member
extern __declspec(dllimport) int code; // ok