我将代码从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中编译。
答案 0 :(得分:2)
throw(...)
作为异常规范不是合法的c ++。
我只能假设您遇到了Microsoft abomination 扩展程序。
您需要将其删除。在任何情况下,实际上唯一有意义的异常说明符是nothrow
(或throw()
如果您使用的是古老的编译器。)
确实,这是吸烟枪:
https://msdn.microsoft.com/en-us/library/wfa0edys.aspx
建议弃用:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3051.html