我正在尝试编写单元测试,在其中,我们将构造函数调用为以下形式的泛型类:
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};