2013-03-14 11 views
6

警告:C++例外とLDのシンボル私はC++で例外を作成して遊んでいると私は、次のテストコード持って

#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?"); 
} 

を私はこれをコンパイルしています:

ICPC -std = C +

:コンパイル時11 -03 -m64

私はこのLDの警告を取得しています

ld:警告:グローバル・ウィーク・シンボルへの直接アクセス __ZN7MyerrorD1Evは、実行時にウィーク・シンボルをオーバーライドできないことを意味します。これは、さまざまな可視性設定でコンパイルされた異なる翻訳単位 によって引き起こされた可能性があります。

icpcの代わりにg ++を使用すると、この警告が表示されません。

私はこれが何を意味するのか、この警告を生成する原因を理解できませんでした。コードは期待どおりに実行されますが、私は望ましくないことを起こしています。

+1

「#を含む」でしたか? –

+2

'-fvisibility = hidden'でコンパイルしようとしましたか? – user2155932

+0

@jotep文字列を含めて何も変わらなかった。 – deepak

答えて

1

は、以下のことを試してみてください。

#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?"); 
} 

未使用の文字列ERRMSGが必要なのはなぜ?

関連する問題