编译器错误 C3821

“function”:无法在非托管函数中使用托管类型或函数

具有内联程序集或 setjmp 的函数不能包含值类型或托管类。 若要修复此错误,请删除内联程序集和 setjmp 或删除托管对象。

如果尝试在 vararg 函数中使用自动存储,也会发生 C3821。 有关详细信息,请参阅变量参数列表 (...) (C++/CLI)参考类型的 C++ 堆栈语义

示例

以下示例生成 C3821。

// C3821a.cpp
// compile with: /clr /c
public ref struct R {};
void test1(...) {
   R r;   // C3821
}

以下示例生成 C3821。

// C3821b.cpp
// compile with: /clr
// processor: /x86
ref class A {
   public:
   int i;
};

int main() {
   // cannot use managed classes in this function
   A ^a;

   __asm {
      nop
   }
} // C3821