Share via


Advertencia del compilador (nivel 1) C4691

"type": se esperaba el tipo al que se hace referencia en el ensamblado "file" sin referencia; se utilizó el tipo definido en la unidad de traducción actual

No se hace referencia al archivo de metadatos que contiene la definición de tipo original y el compilador usa una definición de tipo local.

En caso de que vaya a recompilar file, puede omitir la advertencia C4691 o desactivarla con la pragma warning. Es decir, s el archivo que compila es el mismo archivo en el que el compilador espera encontrar la definición de tipo, puede omitir la advertencia C4691.

Sin embargo, puede producirse un comportamiento inesperado si el compilador usa una definición que no procede del mismo ensamblado al que se hace referencia en los metadatos. Los tipos CLR se definen no solo por el nombre del tipo, sino también por el ensamblado. Es decir, un tipo Z del ensamblado z.dll es diferente de un tipo Z del ensamblado y.dll.

Ejemplos

Este ejemplo contiene la definición de tipo original.

// C4691_a.cpp
// compile with: /clr /LD /W1
public ref class Original_Type {};

En este ejemplo, se hace referencia a C4691_a.dll y se declara un campo de tipo Original_Type.

// C4691_b.cpp
// compile with: /clr /LD
#using "C4691_a.dll"
public ref class Client {
public:
   Original_Type^ ot;
};

El ejemplo siguiente genera la advertencia C4691. Tenga en cuenta que este ejemplo contiene una definición para Original_Type y no hace referencia a C4691a.dll.

Para resolverlo, haga referencia al archivo de metadatos que contiene la definición de tipo original y quite la definición y la declaración locales.

// C4691_c.cpp
// compile with: /clr /LD /W1
// C4691 expected

// Uncomment the following line to resolve.
// #using "C4691_a.dll"
#using "C4691_b.dll"

// Delete the following line to resolve.
ref class Original_Type;

public ref class MyClass : Client {};