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 -O3 -m64

После компиляции я получаю следующее предупреждение:

ld: warning: прямой доступ в _main к глобальному слабому символу
__ZN7MyerrorD1Ev означает, что слабый символ не может быть переопределен во время выполнения. Это, вероятно, было вызвано тем, что
составлено с различными настройками видимости.

Я не получаю это предупреждение, если я использую g ++ вместо icpc.

Я не смог понять, что это значит и что вызывает это предупреждение. Код работает, как и ожидалось, однако я хотел бы понять, что происходит.

6

Решение

Попробуйте следующее:

#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?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]