Compartilhar via


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
};