BUG: È visualizzato un "Errore irreversibile C1001: errore interno del compilatore" valore restituito dell'errore quando si crea un oggetto che rappresenta una copia di una funzione virtuale in Visual c ++ 6.0

Traduzione articoli Traduzione articoli
Identificativo articolo: 226110 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato archiviato. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.
Espandi tutto | Chiudi tutto

Sintomi

Quando creare un oggetto che è una copia di un valore restituito di funzione virtuale (un oggetto temporaneo) utilizzando il costruttore di copia fornito dal compilatore, potrebbe essere visualizzato il seguente errore:
test.cpp(22): errore irreversibile C1001: errore interno del compilatore
(compilatore file 'msc1.cpp', riga 1794)
Scegliere il comando supporto tecnico di Visual c ++
Menu? oppure aprire il file della Guida in linea di supporto tecnico per ulteriori informazioni

Vedere la procedura per riprodurre nella sezione informazioni riportata di seguito.

Risoluzione

Esistono quattro modi per risolvere il problema:
  1. Definire in modo esplicito un costruttore di copia. (Vedere la soluzione # 1 nel codice di esempio riportato di seguito).
  2. Rimuovere la parola chiave virtual dalla funzione che restituisce il valore. (Vedere la soluzione alternativa n. 2 nel codice di esempio riportato di seguito).
  3. Introdurre una variabile temporanea per memorizzare il valore restituito. (Vedere la soluzione alternativa n. 3 nel codice di esempio riportato di seguito).
  4. Rimuovere il supporto del compilatore per la gestione delle eccezioni sincrona di (c ++). Ciò avviene tramite la rimozione /GX (l'impostazione predefinita verrà) dalle opzioni di compilazione. (Vedere la soluzione alternativa n. 4 nel codice di esempio riportato di seguito).
# 1 È la soluzione consigliata quando possibile.

Nota : se si definisce un costruttore di copia, è inoltre necessario definire un operatore di assegnazione (operatore =).

Status

Microsoft ha confermato che questo un bug in Microsoft i prodotti elencati all'inizio di questo articolo.

È stato corretto in Microsoft Visual c ++ .NET.

Informazioni

////////////////////////////////////////////////////////////////////// 
// cl /c /GX test.cpp
// test.cpp(22) : fatal error C1001: INTERNAL COMPILER ERROR
//  (compiler file 'msc1.cpp', line 1794) 
//  Please choose the Technical Support command on the Visual C++ 
//  Help menu, or open the Technical Support help file for more information
////////////////////////////////////////////////////////////////////// 
class A
{
  public:
    /* workaround #1, add an explicit copy constructor to class A */ 
    // A(A& a) {};
    ~A() {}; 
};
class B
{
  public:
 /* workaround #2, remove virtual keyword from B::GetA */ 
    virtual A& GetA(void);
    void Func (void);
};
void B::Func (void)
{
  A *att;
  att=new A(GetA());
  /* workaround #3, substitute the above line with the following two lines */ 
  //A tmp = GetA();
  //att=new A(tmp);
}
/* workaround #4, remove /GX compiler option */ 
				

Proprietà

Identificativo articolo: 226110 - Ultima modifica: domenica 23 febbraio 2014 - Revisione: 3.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Chiavi: 
kbnosurvey kbarchive kbmt kbtshoot kberrmsg kbbug kbcompiler kbfix kbnoupdate KB226110 KbMtit
Traduzione 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: 226110
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.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com