Поделиться через


Предупреждение средств компоновщика LNK4248

неразрешенный маркер typeref (токен) для типа; Образ может не запускаться

Тип не имеет определения в метаданных MSIL.

LNK4248 может возникать, если существует только объявление пересылки для типа в модуле MSIL (скомпилированное с /clr), где тип ссылается в модуле MSIL и где модуль MSIL связан с собственным модулем, который имеет определение для типа.

В этой ситуации компоновщик предоставит определение собственного типа в метаданных MSIL, и это может обеспечить правильное поведение.

Однако если объявление типа пересылки является типом CLR, определение собственного типа компоновщика может быть неправильно

Дополнительные сведения см. в разделе /clr (компиляция CLR).

Исправление ошибки

  1. Укажите определение типа в модуле 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;
}