【发布时间】:2016-01-15 10:35:38
【问题描述】:
Borland C++Builder 中 C++ 构造函数的扩展。
我有一些代码可以连接UnicodeString 值(以前是AnsiString)。
UnicodeString string="test1";
Variant v1="test";
string = string + UnicodeString(v1);
[bcc32 错误] myTest.cpp(154): E2015 Ambiguity between 'System::UnicodeString::UnicodeString(const System::UnicodeString &) at c:\program files (x86)\embarcadero\studio\17.0\include\windows\rtl\ustring.h:86' 和 'System::UnicodeString::UnicodeString(const wchar_t *) at c:\program files (x86)\embarcadero\studio\17.0\include\windows\rtl\ustring.h:89'
现在,问题是Variant 是模棱两可的,编译器会抱怨这种模棱两可(很公平)。
如果我将直接转换添加到string,它可以正常工作。
string = string + UnicodeString(v1.As<UnicodeString>());
问题是我的代码很大,而且有成千上万个这样的代码。我想介绍一个新的显式 typedef 或宏来执行此操作:
给定参数 v1 是 Variant,它执行而不是这个:
UnicodeString(v1)
它改为执行此操作:
UnicodeString(v1.As<UnicodeString>())
我知道这可以通过添加 UnicodeString(Variant) 以某种方式(不确定如何)扩展 UnicodeString 的构造函数或 typedef 来实现
(或宏?)。
附言。 UnicodeString是系统类,不能直接修改。
PS1。 AnsiString 也有同样的问题(甚至更多的代码片段)。制作函数不起作用:(。对于AnsiString,它不起作用:(。
系统头文件(sysmac.h)中AnsiString的定义:
typedef AnsiStringT<0> AnsiString;
例子:
AnsiString myTest::AnsiString(Variant v)
{
return "";
}
[bcc32 错误] .cpp(122): E2235 成员函数必须被调用或其地址被占用
【问题讨论】:
-
只定义一个函数
-
对于 AnsiString 它不起作用 :(。系统头文件 (sysmac.h) 中的定义: typedef AnsiStringT AnsiString; 示例: AnsiString myTest::AnsiString(Variant v) { return ""; } [bcc32 错误] .cpp(122): E2235 成员函数必须被调用或其地址被占用
-
不要将您的函数命名为
AnsiString(),而是将其命名为AsAnsiString()。让它成为你的类的成员是没有意义的(除非你将它定义为static),因为它没有访问该类的任何成员。为什么是return ""而不是return v.As<AnsiString>()?
标签: c++ error-handling typeof unicode-string