Identificativo articolo: 325570 - Ultima modifica: martedì 17 gennaio 2006 - Revisione: 2.2

BUG: È possibile che venga visualizzato il "Errore irreversibile C1001: errore interno del compilatore" messaggio di errore quando si tenta di esportare una classe utilizzando Visual c ++. NET.

Suggerimento di sistemaIl presente articolo fa riferimento a un sistema operativo diverso da quello in uso. Il contenuto dell'articolo che potrebbe non essere relativo al sistema in uso è disabilitato.

In questa pagina

Espandi tutto | Chiudi tutto

Sintomi

Quando si tenta di compilare codice simile al codice di esempio appare nella sezione "Procedura per riprodurre il il comportamento" di questo articolo, viene potrebbe essere visualizzato il seguente messaggio di errore:
Errore irreversibile C1001: errore interno del compilatore
(file del compilatore msc1.cpp, riga 2844)

Cause

Questo comportamento si verifica solo in presenza delle seguenti condizioni:
  • È possibile applicare __declspec (dllexport) a una classe che dispone di una classe base che non è __declspec (dllexport) .

    - e -
  • La classe base dispone di più classi base che dispongono di funzioni virtuali.

Risoluzione

Per aggirare il problema, effettuare una delle seguenti operazioni:
  • Esportazione in modo esplicito la classe base C utilizzando la sintassi seguente:
    template struct __declspec (dllexport) C<int>;
    - oppure -
  • Rendere una delle funzioni non virtuale.

Status

Microsoft ha confermato che questo un bug in Microsoft i prodotti elencati all'inizio di questo articolo. Questo problema è stato risolto in Microsoft Visual c ++ .NET (2003).

Informazioni

Procedura per riprodurre il problema.

Per riprodurre il problema, provare a compilare il codice riportato di seguito:
//test.cpp
// Compiler Option: cl /c test.cpp
struct __declspec (dllexport) A
{
	virtual ~A(void){}
};

struct __declspec (dllexport) B
{
	virtual ~B(void){}
};

template <class T>
struct  C : A, B
{
};

//template struct __declspec (dllexport) C<int>;//WORKAROUND 1

struct __declspec (dllexport) D : C<int>
{
};

				

Le informazioni in questo articolo si applicano a:
  • Microsoft Visual C++ .NET 2002 Standard Edition
Chiavi: 
kbmt kbfix kbbug kbcompiler kberrmsg kbpending KB325570 KbMtit
Traduzione automatica articoliTraduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 325570  (http://support.microsoft.com/kb/325570/en-us/ )
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.