delphi 中 raise exception.create(Error) 怎么翻译成C++ 语言?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 中 raise exception.create(Error) 怎么翻译成C++ 语言?相关的知识,希望对你有一定的参考价值。
delphi里 Result.free是什么意思 如果要翻译成C++该怎么写啊?
Delphi 中的raise exception.create(Error)就是主动扔出一个类型为exception的异常,exception是Delphi中的异常类,相当于c++的
throw new exception(Error);
Delphi中的类的析构函数用destructor修饰符来定义,与C++的~修饰符一样,但通常情况下都是使用Destroy这个名字做为析构方法,
Free是TObject类定义的一个方法,它只是简单地调用了Destroy这个方法来析构类,所以Result.Free相当于C++里调用了delete Result 参考技术A Delphi syntax:
procedure Free;
C++ syntax:
__fastcall Free();
result.free; //in here maybe is a class by defined?
such as TStrings.Create then
var result:TStrings;
result:=TStrings.create; //...
result.free?
in c++:
free(result)
std::exception::_Raise 和 std::exception::exception 上的 VC++ 链接器错误
【中文标题】std::exception::_Raise 和 std::exception::exception 上的 VC++ 链接器错误【英文标题】:VC++ linker errors on std::exception::_Raise and std::exception::exception 【发布时间】:2008-10-30 08:51:10 【问题描述】:我正在使用 Visual C++ 2005 Express Edition 并收到以下链接器错误:
19>mylib1.lib(mylibsource1.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::exception::_Raise(void)const " (__imp_?_Raise@exception@std@@QBEXXZ) referenced in function "protected: static void __cdecl std::vector<class mytype,class std::allocator<class mytype> >::_Xlen(void)" (?_Xlen@?$vector@Vmytype@@V?$allocator@Vmytype@@@std@@@std@@KAXXZ)
19>mylib2.lib(mylibsource2.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::exception::_Raise(void)const " (__imp_?_Raise@exception@std@@QBEXXZ)
19>mylib1.lib(mylibsource1.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::exception::exception(char const *,int)" (__imp_??0exception@std@@QAE@PBDH@Z) referenced in function "public: __thiscall std::logic_error::logic_error(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0logic_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z)
19>mylib2.lib(mylibsource2.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::exception::exception(char const *,int)" (__imp_??0exception@std@@QAE@PBDH@Z)
我在生成的代码中关闭了异常,并且在包含矢量头文件之前使用:
#define _HAS_EXCEPTIONS 0
一些 Google 结果出现了一些东西,但没有“啊哈!”对我有用的解决方案。
编辑:
如前所述,“_HAS_EXCEPTIONS 0”本身并不会关闭异常。它的作用是,至少在向量头文件中,是在异常对象上调用 _Raise,而不是调用 C++“抛出”。就我而言,它无法链接到异常对象的 _Raise 函数,因为我没有包含正确的库。不过,这个库是什么并不明显。
【问题讨论】:
【参考方案1】:添加这一行:
#define _STATIC_CPPLIB
在包含矢量标题之前似乎可以解决问题。
【讨论】:
【参考方案2】:第三个错误清楚地表明#define the _HAS_EXCEPTIONS 0
不影响 .现在,可能包括(有意义,共享代码可能会减少可执行文件的大小)。这可以解释为什么如果您在 your 包含 .这种定义应该在您的项目设置中完成。
请注意,_HAS_EXCEPTIONS 是 Visual Studio 中不支持的功能。它不会关闭异常。
【讨论】:
以上是关于delphi 中 raise exception.create(Error) 怎么翻译成C++ 语言?的主要内容,如果未能解决你的问题,请参考以下文章
Python2和Python3中raise Exception
std::exception::_Raise 和 std::exception::exception 上的 VC++ 链接器错误
pytest, raise_for_status with Failed: DID NOT RAISE <class 'requests.exceptions.HTTPError'>