投掷和共享对象的可见性
Visibility with throw and shared objects
我正在将一段代码从Windows移植到CentOS,但我遇到了一个从未见过的问题。
给定函数声明(还有更多):
byte getValueInt8() const throw(.../*Exception*/);
我得到这个错误:
error: expected type-specifier before ‘...’ token unsigned short getValueInt8() const throw(.../*Exception*/);
当然,我查过互联网,发现这是共享对象中的可见性问题。
此网站https://gcc.gnu.org/wiki/Visibility解释了这一点,但当我读到它时,我已经这样做了。
我的定义是:
#if defined(_MSC_VER)
#include <winsock2.h>
#ifdef MFTINTERFACE_EXPORTS
#define EXPORT_IMPORT __declspec(dllexport)
#else
#define EXPORT_IMPORT __declspec(dllimport)
#endif
#elif defined(_GCC)
#include <arpa/inet.h>
#include "CmnSocketsDef.h"
#include "CmnDefs.h"
#define EXPORT_IMPORT __attribute__((visibility("default")))
#else
#define EXPORT_IMPORT
#define IMPORT
#pragma warning Unknown dynamic link import/EXPORT_IMPORT semantics.
#endif
当然,所有EXPORT_IMPORT都在我的代码中设置好了。
修改前的代码在Windows中编译。
throw(...)
作为异常规范是不合法的c++。
我只能假设你遇到了微软的可憎的扩展。
你需要删除它。在任何情况下,唯一有意义的异常说明符是nothrow
(如果你使用的是古老的编译器,则是throw()
)。
事实上,这是确凿的证据:
https://msdn.microsoft.com/en-us/library/wfa0edys.aspx
建议弃用:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3051.html
相关文章:
- 如何更改唯一指针向量的可见性
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 标准::时间::d类型的挥发性对象
- 限制静态库中符号的可见性 (MSVC/Visual C++)
- 班级成员可见性C++
- 内联模板函数的可见性
- Clang 是否可以在使用可见性属性时生成导入库(不带 __declspec(dllexport))?
- std::mutex 的发布-获取可见性保证是否仅适用于关键部分?
- 符号可见性和 gcc 警告
- C++/libscreen 无法更新可见性
- 在 C++11 线程中,std::mutex 对内存可见性有什么保证?
- C++继承构造函数的可见性
- CRTP - 嵌套叶类类型的可见性
- C++模板 - 实例之间的通用操作和成员可见性
- 放松的订单和线程间可见性
- GCC 6.x警告有关Lambda可见性
- C++ 中的Shared_ptr和内存可见性
- 投掷和共享对象的可见性
- 可视化C++对象可见性
- 实例化对象变量可见性