Я играю с созданием исключений в 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.
Я не смог понять, что это значит и что вызывает это предупреждение. Код работает, как и ожидалось, однако я хотел бы понять, что происходит.
Попробуйте следующее:
#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?
Других решений пока нет …