编译器错误 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