6

我正在玩在 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 -O3 -m64

编译后,我收到此 ld 警告:

ld:警告:在 _main 中直接访问全局弱符号 __ZN7MyerrorD1Ev 意味着在运行时不能覆盖弱符号。这可能是由使用不同可见性设置编译的不同翻译单元引起的。

如果我使用 g++ 而不是 icpc,我不会收到此警告。

我无法理解这意味着什么,以及导致此警告产生的原因。代码按预期运行,但是我想取消正在发生的事情。

4

1 回答 1

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?

于 2013-03-18T14:19:01.957 回答