我正在尝试编写单元测试,在其中,我们将构造函数调用为以下形式的泛型类:

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};

08-26 21:09
查看更多