Bagikan melalui


Compiler Warning (level 1) C4691

'type' : jenis yang direferensikan diharapkan dalam rakitan 'file' yang tidak direferensikan, jenis yang ditentukan dalam unit terjemahan saat ini yang digunakan sebagai gantinya

File metadata yang berisi definisi jenis asli tidak dirujuk, dan pengkompilasi menggunakan definisi jenis lokal.

Dalam kasus di mana Anda membangun kembali file, C4691 dapat diabaikan atau dinonaktifkan dengan peringatan pragma. Artinya, jika file yang Anda buat sama dengan file di mana pengkompilasi mengharapkan untuk menemukan definisi jenis, Anda dapat mengabaikan C4691.

Namun, perilaku tak terduga dapat terjadi jika pengkompilasi menggunakan definisi yang bukan dari rakitan yang sama yang direferensikan dalam metadata; Jenis CLR di ketik tidak hanya dengan nama jenis, tetapi juga oleh perakitan. Artinya, jenis Z dari assembly z.dll berbeda dari jenis Z dari assembly y.dll.

Contoh

Sampel ini berisi definisi jenis asli.

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

Sampel ini mereferensikan C4691_a.dll dan mendeklarasikan bidang jenis Original_Type.

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

Sampel berikut menghasilkan C4691. Perhatikan bahwa sampel ini berisi definisi untuk Original_Type dan tidak mereferensikan C4691a.dll.

Untuk mengatasinya, referensikan file metadata yang berisi definisi jenis asli dan hapus deklarasi dan definisi lokal.

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