Compiler Error C3381
'identifier' : assembly access specifiers are only available in code compiled with a /clr option
A type was declared or defined by using an access specifier, which is only permitted in code compiled by using /clr
.
Remarks
This error may result from a misplaced public
, protected
, or private
keyword, or a missing colon (:
) after an access specifier within a class
or struct
.
In C++/CLI, native types can be visible outside an assembly, but you can only specify assembly access for native types in a /clr
compilation. For more information, see Type visibility and /clr
(Common Language Runtime Compilation).
Example
The following sample generates C3381. To fix it, first either remove the public
specifier from the class A
definition, or compile by using the /clr
option. Next, add a colon after private
to specify access for class B {} b;
. That's because a nested class can't have an assembly access specifier as part of its declaration.
// C3381.cpp
// compile with: /c
public class A { // C3381
private class B {} b; // C3381
};