Предупреждение компилятора (уровень 1) C4691
"type" : тип, на который ссылается тип, ожидался в сборке unreferenced "file", тип, определенный в текущей единице перевода, используемой вместо этого
Файл метаданных, содержащий определение исходного типа, не ссылается, и компилятор использует определение локального типа.
В случае перестроения файла C4691 можно игнорировать или отключить с предупреждением pragma. То есть, если файл, который вы создаете, совпадает с файлом, в котором компилятор ожидает найти определение типа, можно игнорировать C4691.
Однако непредвиденное поведение может возникать, если компилятор использует определение, которое не из той же сборки, на которую ссылается метаданные; Типы СРЕДЫ CLR типируются не только по имени типа, но и сборке. То есть тип Z из сборки z.dll отличается от типа Z от сборки y.dll.
Примеры
Этот пример содержит исходное определение типа.
// C4691_a.cpp
// compile with: /clr /LD /W1
public ref class Original_Type {};
Этот пример ссылается на C4691_a.dll и объявляет поле типа Original_Type.
// C4691_b.cpp
// compile with: /clr /LD
#using "C4691_a.dll"
public ref class Client {
public:
Original_Type^ ot;
};
Следующий пример приводит к возникновению ошибки C4691. Обратите внимание, что этот пример содержит определение для Original_Type и не ссылается на C4691a.dll.
Чтобы устранить проблему, наведите ссылку на файл метаданных, содержащий исходное определение типа, и удалите локальное объявление и определение.
// 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 {};