gpt4 book ai didi

C++ 异常和 ld 符号警告

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:14 26 4
gpt4 key购买 nike

我正在尝试用 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: warning: direct access in _main to global weak symbol __ZN7MyerrorD1Ev means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.

如果我使用 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?

关于C++ 异常和 ld 符号警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15402243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com