C++ 具有抛出和共享对象的可见性
我正在将一段代码从Windows移植到CentOS,但我遇到了一个我以前从未见过的问题 考虑到该函数声明(还有很多): 我得到这个错误:C++ 具有抛出和共享对象的可见性,c++,object,visibility,shared,throw,C++,Object,Visibility,Shared,Throw,我正在将一段代码从Windows移植到CentOS,但我遇到了一个我以前从未见过的问题 考虑到该函数声明(还有很多): 我得到这个错误: error: expected type-specifier before ‘...’ token unsigned short getValueInt8() const throw(.../*Exception*/); 当然,我检查过互联网,发现共享对象中存在可见性问题 这个网站解释了这一点,但当我读到它时,我已经这样做了 我的定义是: #if defin
error: expected type-specifier before ‘...’ token unsigned short getValueInt8() const throw(.../*Exception*/);
当然,我检查过互联网,发现共享对象中存在可见性问题
这个网站解释了这一点,但当我读到它时,我已经这样做了
我的定义是:
#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
#如果已定义(_MSC_VER)
#包括
#ifdef MFTINTERFACE_导出
#定义导出\导入\ declspec(dllexport)
#否则
#定义导出\导入\ declspec(dllimport)
#恩迪夫
#定义的elif(通用条款)
#包括
#包括“CmnSocketsDef.h”
#包括“CmnDefs.h”
#定义导出\导入\属性(可见性(“默认”))
#否则
#定义导出和导入
#定义导入
#pragma警告未知动态链接导入/导出\u导入语义。
#恩迪夫
当然,所有的导出和导入都在我的代码中进行了很好的设置
代码,修改前在Windows中编译。 <代码>抛出(…)>代码>作为异常规范不是合法的C++。
我只能假设您遇到了Microsoft讨厌的扩展
您需要删除它。在任何情况下,实际上唯一有意义的异常说明符是nothrow
(或者throw()
,如果您使用的是古老的编译器)
事实上,这是一把冒烟的枪:
反对的建议:
抛出(…)
表示函数可以抛出任何异常。这类似于根本没有异常规范。好的,非常感谢!我删除了所有这些抛出然后@Render yes,删除所有throw(…)
语句。保留throw()
函数,因为它们要求函数不能抛出任何东西。您可以将这些转换为nothrow
,因为throw()
已被弃用。实际上,我不会。我刚刚看到在不同的文件中,“…”之后除了/*异常*/还有其他信息。这是一种结构类型,所以我把它扔了。我刚刚修改了一段代码works@Render. 如果取消注释Exception
,则说明该函数保证不会抛出除Exception
以外的任何内容。如果是,程序将中止()
。实际上最好完全删除异常规范。他们被贬低,因为这是一个错误,把他们放在C++标准中。Exception是一个结构,其中包含一个消息字符串。使用“try catch”处理这些异常,并在catch中返回false。是否仍将调用abort()
?
#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