2013-03-14 17 views
6

sto giocando con la creazione di eccezioni in C++ e ho il seguente codice di prova:C++ eccezione e simbolo ld avvertimento

#include <iostream> 
#include <stdexcept> 
#include <new> 
using namespace std; 

class Myerror : public runtime_error { 
    private: 
     string errmsg; 
    public: 
     Myerror(const string &message): runtime_error(message) { } 
}; 

int main(int argc, char *argv[]) { 
    throw Myerror("wassup?"); 
} 

sto compilando questo con:

ICPC -std = c + +11 -O3 -m64

Su compilazione sto ottenendo questo ld avvertimento:

ld: avviso: accesso diretto in _main al simbolo debole globale __ZN7MyerrorD1Ev significa che il simbolo debole non può essere sovrascritto in fase di runtime. Ciò è stato probabilmente causato da diverse unità di traduzione compilate con diverse impostazioni di visibilità.

Non ricevo questo avviso se utilizzo g ++ anziché icpc.

Non sono stato in grado di capire cosa significa e cosa sta causando la generazione di questo avviso. Il codice funziona come previsto, tuttavia mi piacerebbe capire cosa sta succedendo.

+1

"#include "? –

+2

Hai provato a compilare con '-fvisibility = hidden'? – user2155932

+0

@jotep La stringa inclusa non ha modificato nulla. – deepak

risposta

1

provare quanto segue:

#include <iostream> 
#include <stdexcept> 
#include <new> 
using namespace std; 

class Myerror : public runtime_error { 
    public: 
     Myerror(const string &message) throw(): runtime_error(message) { } 
     virtual ~Myerror() throw() {} 
}; 

int main(int argc, char *argv[]) { 
    throw Myerror("wassup?"); 
} 

Perché avete bisogno inutilizzato errmsg stringa?

Problemi correlati