Partilhar via


Aviso do compilador (nível 1) C4691

'type': tipo referenciado era esperado em 'file' do assembly não referenciado, tipo definido na unidade de tradução atual usado

O arquivo de metadados que contém a definição de tipo original não está referenciado, e o compilador está usando uma definição de tipo local.

No caso em que você estiver recompilando o arquivo, C4691 pode ser ignorado ou desativado com o aviso de pragma. Ou seja, se o arquivo que você está criando for o mesmo arquivo em que o compilador espera encontrar a definição de tipo, você poderá ignorar C4691.

No entanto, um comportamento inesperado poderá ocorrer se o compilador usar uma definição que não seja do mesmo assembly referenciado em metadados; os tipos CLR são definidos não apenas pelo nome do tipo, mas também pelo assembly. Ou seja, um tipo Z do assembly z.dll é diferente de um tipo Z do assembly y.dll.

Exemplos

Este exemplo contém a definição de tipo original.

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

Este exemplo faz referência a C4691_a.dll e declara um campo de tipo Original_Type.

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

O exemplo a seguir gera o aviso C4691. Observe que este exemplo contém uma definição para Original_Type e não faz referência a C4691a.dll.

Para resolver, faça referência ao arquivo de metadados que contém a definição de tipo original e remova a declaração e a definição locais.

// 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 {};