Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有抛出和共享对象的可见性_C++_Object_Visibility_Shared_Throw - Fatal编程技术网

C++ 具有抛出和共享对象的可见性

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

我正在将一段代码从Windows移植到CentOS,但我遇到了一个我以前从未见过的问题

考虑到该函数声明(还有很多):

我得到这个错误:

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