【问题标题】:C++ error C2664 with CStrings带有 CStrings 的 C++ 错误 C2664
【发布时间】:2015-11-11 14:35:43
【问题描述】:

我有一些我知道用来编译的旧 C++ 文件。我已经创建了 Visual C++ 版本 6 的新安装。

我收到很多关于无法转换为 const char * 的 CStrings 编译错误

这是一个例子。

CString dogs = "test";
writeoutfile(dogs, 1);

void Crender::writeoutfile(CString data, long data_size) {}

我收到此错误:

错误 C2664: 'void __thiscall Crender::writeoutfile(const char *,long)' : 无法将参数 1 从 'class CString' 转换为 'const char *'

有什么办法可以解决这个问题吗?

【问题讨论】:

  • writeoutfile 的原型与您那里的实现不匹配(它需要 const char *,而不是 CString),或者您在某处将 CString 键入到 const char * .
  • 完全正确我更改了 cpp 文件,但没有更改 h 文件。它曾经说 void writeoutfile (LPCSTR data, long data_size = -1)。我将第一个参数更改为 CString 只是为了尝试简化问题。

标签: c++ visual-c++


【解决方案1】:

您必须获取指向 char 字段的原始指针。这可以通过

CString::GetBuffer()

所以你可以打电话

writeoutfile(dogs.GetBuffer(), 1);

【讨论】:

  • 请注意,这会丢弃任何编码信息,并可能导致数据不可读。
  • GetBuffer 需要一个最小长度参数。这应该是什么?它还返回错误的类型。
【解决方案2】:

CString 应该转换为 const char*。它是 Unicode 版本吗?这是我能想到的唯一解释。

GetBuffer() 用于获取指向 CString 中包含的数据的可写指针。不要那样做!

【讨论】:

    猜你喜欢
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多