Udostępnij za pomocą


Ostrzeżenie kompilatora (poziom 1) C4691

"type" : typ, do którego odwołuje się, był oczekiwany w zestawie "file", typ zdefiniowany w bieżącej jednostce tłumaczenia używany zamiast tego

Plik metadanych zawierający oryginalną definicję typu nie jest przywołyny, a kompilator używa lokalnej definicji typu.

W przypadku ponownego kompilowania pliku można zignorować lub wyłączyć polecenie C4691 z ostrzeżeniem pragma. Oznacza to, że jeśli plik, który tworzysz, jest taki sam jak plik, w którym kompilator oczekuje znalezienia definicji typu, możesz zignorować C4691.

Jednak może wystąpić nieoczekiwane zachowanie, jeśli kompilator używa definicji, która nie pochodzi z tego samego zestawu, który jest przywoływany w metadanych; Typy CLR są wpisywane nie tylko według nazwy typu, ale także przez zestaw. Oznacza to, że typ Z z z.dll zestawu różni się od typu Z od y.dll zestawu.

Przykłady

Ten przykład zawiera oryginalną definicję typu.

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

Ten przykład odwołuje się C4691_a.dll i deklaruje pole typu Original_Type.

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

Poniższy przykład generuje C4691. Zwróć uwagę, że ten przykład zawiera definicję Original_Type i nie odwołuje się do C4691a.dll.

Aby rozwiązać ten problem, odwołaj się do pliku metadanych zawierającego oryginalną definicję typu i usuń lokalną deklarację i definicję.

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