Предупреждение средств компоновщика LNK4248
неразрешенный маркер typeref (токен) для типа; Образ может не запускаться
Тип не имеет определения в метаданных MSIL.
LNK4248 может возникать, если существует только объявление пересылки для типа в модуле MSIL (скомпилированное с /clr), где тип ссылается в модуле MSIL и где модуль MSIL связан с собственным модулем, который имеет определение для типа.
В этой ситуации компоновщик предоставит определение собственного типа в метаданных MSIL, и это может обеспечить правильное поведение.
Однако если объявление типа пересылки является типом CLR, определение собственного типа компоновщика может быть неправильно
Дополнительные сведения см. в разделе /clr (компиляция CLR).
Исправление ошибки
- Укажите определение типа в модуле MSIL.
Примеры
Следующий пример создает LNK4248. Определите структуру A для разрешения.
// LNK4248.cpp
// compile with: /clr /W1
// LNK4248 expected
struct A;
void Test(A*){}
int main() {
Test(0);
}
В следующем примере имеется определение типа пересылки.
// LNK4248_2.cpp
// compile with: /clr /c
class A; // provide a definition for A here to resolve
A * newA();
int valueA(A * a);
int main() {
A * a = newA();
return valueA(a);
}
Следующий пример создает LNK4248.
// LNK4248_3.cpp
// compile with: /c
// post-build command: link LNK4248_2.obj LNK4248_3.obj
class A {
public:
int b;
};
A* newA() {
return new A;
}
int valueA(A * a) {
return (int)a;
}