警告:已弃用从字符串常量到“ACE_TCHAR*”的转换
warning: deprecated conversion from string constant to ‘ACE_TCHAR*’
我正在尝试编写单元测试,其中我们将构造函数调用到以下形式的泛型类:
void testConstructor() {
int argc = 2;
ACE_TCHAR* argv[] = {"Input1", "Input2"};
MyClass *myClass = new MyClass(argc, argv);
/**processing**/
}
把ACE_TCHAR*
想成和char*
一样。上面的代码导致
warning: deprecated conversion from string constant to ‘ACE_TCHAR*’
我也尝试过:
void testConstructor() {
int argc = 2;
ACE_TCHAR* argv[2];
argv[0] = "Input1";
argv[1] = "Input2";
MyClass *myClass = new MyClass(argc, argv);
/**processing**/
}
这会导致相同的错误。
我在网上某处读到,这可以通过使用
const ACE_TCHAR* argv[] = {"Input1", "Input2"};
但是由于函数签名,编译失败。
编辑:我不允许修改第三方代码,我只为它编写单元测试。
有什么想法吗?
字符串常量,顾名思义,是一个常量。因此,要使警告消失,正确的解决方案确实是将指针转换为常量指针。
如果无法做到这一点,您可以显式类型转换
ACE_TCHAR* argv[] = {const_cast<ACE_TCHAR*>("Input1"),
const_cast<ACE_TCHAR*>("Input2")};
或者先将字符串分配给非常量字符数组
char input1[] = "Input1";
char input2[] = "Input2";
ACE_TCHAR* argv[] = {input1, input2};
字符串文字的类型是"const char
数组"。通过隐式数组到指针的转换,您可以使用它来初始化或分配给const char *
。
但是有一个特殊的规则,字符串文字也可以隐式转换为char *
(没有常量)。此规则的存在是为了与旧的 C 代码兼容,其中 char * str = "string literal"
是一个常见的习惯用法。使用此方法很危险,因为通过该指针修改指向字符数组会导致未定义的行为(即您的程序可能会崩溃,或者可能发生任何其他事情)。因此,该构造已弃用,编译器会向您发出警告。
要创建可以作为非常量字符指针传递的有效数据,您可以使用
const int argc = 2;
ACE_TCHAR argv0[] = "Input1";
ACE_TCHAR argv1[] = "Input2";
ACE_TCHAR* argv[] = { argv0, argv1 };
MyClass *myClass = new MyClass(argc, argv);
相关文章:
- 检查TCHAR数组输入是否为带符号整数C++
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- 如何添加预防措施以绕过未注册Microsoft.ACE.OLEDB.12.0?
- 如何在虚幻引擎4中将char*转换为TCHAR?
- 使用什么代替"静态常量 TCHAR *"
- Visual Studio C++:不能使用类型为 "const wchar_t *" 的值来初始化类型为 "TCHAR *" 的实体
- C++ TCHAR* 的文本宏
- 用于从 ANSI 字符串转换为 std::basic_string <TCHAR>的正确函数声明
- 删除unicode def后,无法将QString转换为TCHAR
- 如何将TCHAR转换为常量字符
- 如果使用多字节字符集,为什么TCHAR值会更改
- 在 Slackware 14.2 64 位上使用 ACE 库编译错误
- TCHAR Array to a concatenate LPCSTR
- 将 std::string 转换为 const tchar*
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- ACE.sln和ACE_wrappers.sln之间的区别ACE_wrappers?
- 正确的交叉平台从 std::string 转换为 'const TCHAR *'
- 使用_tcscpy_s将 CString 复制到 TCHAR*
- 我可以依靠 TCHAR 的定义对我正在使用的字符集做出正确的假设吗?
- 在使用VS2010构建ACE和TAO(CORBA)时发生了许多错误