C ++奇怪的char *参数问题(不兼容的类型)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++奇怪的char *参数问题(不兼容的类型)相关的知识,希望对你有一定的参考价值。

我对char *作为参数有轻微的问题。我之前从未遇到过这个问题,但我似乎无法找到它为什么会发生这种情况。 “应该完全没问题”的一个小例子:

void foo(char* param)
{
    return;
}

foo("hello world");

这不起作用,因为我们得到错误:

不能将参数1从'const char [12]'转换为'char *'

我环顾四周但找不到任何东西。我也尝试过改变字符集,但那无处可去。我创建了一个新项目,但同样的事情发生了。我可能在某处改变了设置吗?

我试图添加适用于基本示例但不适用于我的模板的const

void Setup()
{
    Find<MyClass>("function.dll", "function");
}

template <class i>
i* Find(const char* module, const char* name)
{
    return nullptr;
}

这给了我一些我从未见过的东西:

从字符串文字转换失去const限定符(参见/ Zc:strictStrings)

答案

字符串文字是char const *,而不是char *。编译器在这里是正确的。如果你想拥有一个可修改的char数组,你可以这样做:

void foo(char *) { }
char buf[] = {"hello, world"};
foo(bar);

以上是关于C ++奇怪的char *参数问题(不兼容的类型)的主要内容,如果未能解决你的问题,请参考以下文章

Delphi中不兼容的char和widechar

不兼容的转换字符

类型不匹配解决了通过引用获取参数的闭包

如何解决不支持 3 个参数的变体 apply_visitor?

为啥 heroku 会给我这个“不兼容的类型”错误?

MSVC2015 更新 3 可变参数模板解决方法