这给出了错误:无法从“const char *”转换为“char *”。

class Mock
{
public:
    ...
    static void func(char **result)
    {
          *result = (resultsI++)->c_str();
    }
static std::vector<std::string> results;
static std::vector<std::string>::iterator resultsI;
};

std::vector<std::string> Mock::results;
std::vector<std::string>::iterator Mock::resultsI;

如何在不更改函数 func 的接口(interface)的情况下有效地摆脱此错误?该接口(interface)的实现者:
void (func*)(char **result)

忘记在签名中使用 const char**。我无法改变它。

记住这是一个模拟,我只在我的单元测试中使用。

最佳答案

尝试:

*result = &(*resultsI++)[0];

虽然这不能保证在 C++11 之前工作,但已知在大多数或所有当前编译器上都可以。

危险在于,如果该函数试图更改字符串的长度,您可能会遇到一些令人讨厌的错误。更改单个字符应该没问题。

关于c++ - 对于 std::string::c_str 无法从 'const char *' 转换为 'char *',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13420410/

10-11 22:54
查看更多