リンカー ツールの警告 LNK4248

'type' の未解決の typeref トークン (トークン)。イメージが実行されない可能性があります

型に ’ MSIL メタデータ内の定義が含まれています。

LNK4248 は、MSIL モジュール (/clrでコンパイル) 内の型の前方宣言のみがある場合に発生する可能性があります。ここで、MSIL モジュールで型が参照され、MSIL モジュールは型の定義を持つネイティブ モジュールにリンクされます。

この状況では、リンカーは MSIL メタデータにネイティブ型定義を提供し、正しい動作を提供する可能性があります。

ただし、前方型宣言が 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;
}