Share via


Upozornění kompilátoru (úroveň 1) C4691

'type' : typ odkazovaný byl očekávána v nerozpoznané sestavení 'file', typ definovaný v aktuální jednotce překladu použité místo toho

Na soubor metadat obsahující původní definici typu se neodkazuje a kompilátor používá definici místního typu.

V případě opětovného sestavení souboru lze C4691 ignorovat nebo vypnout s upozorněním pragma. To znamená, že pokud je soubor, který vytváříte, stejný jako soubor, ve kterém kompilátor očekává, že najde definici typu, můžete C4691 ignorovat.

Neočekávané chování však může dojít, pokud kompilátor používá definici, která není ze stejného sestavení, na které se odkazuje v metadatech; Typy CLR jsou zadány nejen názvem typu, ale také sestavením. To znamená, že typ Z ze sestavení z.dll se liší od typu Z z sestavení y.dll.

Příklady

Tato ukázka obsahuje původní definici typu.

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

Tato ukázka odkazuje na C4691_a.dll a deklaruje pole typu Original_Type.

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

Následující ukázka vygeneruje C4691. Všimněte si, že tato ukázka obsahuje definici pro Original_Type a neodkazuje na C4691a.dll.

Pokud chcete tento problém vyřešit, odkazujte na soubor metadat, který obsahuje původní definici typu, a odeberte místní deklaraci a definici.

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