Erro do compilador C3381
'identifier': especificadores de acesso de assembly estão disponíveis apenas em código compilado com uma opção /clr
Um tipo foi declarado ou definido usando um especificador de acesso, que só é permitido no código compilado usando /clr
.
Comentários
Esse erro pode resultar de uma palavra-chave public
, protected
ou private
, ou dois-pontos (:
) ausentes após um especificador de acesso dentro de um class
ou struct
.
No C++/CLI, os tipos nativos podem ser visíveis fora de um assembly, mas você só pode especificar o acesso de assembly para tipos nativos em uma compilação /clr
. Para obter mais informações, confira Visibilidade de tipo e /clr
/clr (Compilação no Common Language Runtime).
Exemplo
A amostra a seguir gera C3381. Para corrigi-lo, primeiro remova o especificador public
da definição class A
, ou compile usando a opção /clr
. Em seguida, adicione dois-pontos depois de private
para especificar o acesso para class B {} b;
. 'class': uma classe aninhada não pode ter um especificador de acesso de assembly como parte da própria declaração.
// C3381.cpp
// compile with: /c
public class A { // C3381
private class B {} b; // C3381
};