C++ 编译时提示:不能将参数 1 从“char [6]”转换为“LPCTSTR”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 编译时提示:不能将参数 1 从“char [6]”转换为“LPCTSTR”相关的知识,希望对你有一定的参考价值。

setWindowTextW()
后面这个W代表的是宽字节类型
即WCHAR类型
也就是说
setWindowTextW()中的参数是一个WCHAR类型的指针
那就不能将
CHAR
类型转换为WCHAR
类型了
编译器就报错了
setWindowTextA()这个中的指针是一个CHAR类型的指针
可将那个W删除程序就OK了
修改如下
CString
METext;
char
Count[6];
int
a,b;
m_MultiEdit.GetWindowText(METext);
a=METext.GetLength();
b=m_MultiEdit.GetLineCount();
a-=(b-1);
itoa(a,Count,10);
m_CharEdit.SetWindowText(Count);
itoa(b,Count,10);
m_LineEdit.SetWindowText(Count);
一般在工程中都是使用SetWindowText
而不是直接写SetWindowTextA
或者SetWindowTextW
编译器会自动根据UNICODE
_UNICOUDE
自动转换成相应的CHAR
或者
WCHAR
CHAR
WCHAR
一般都写为TCHAR
如果你的工程就是设置为多字节的工程,那也可以直接使用CHAR
VC++6.0的工程默认是多字节的工程
SetWindowTextA,SetWindowTextW,前者是多字节,后者是unicode版本
参考技术A 在项目属性里面找到项目默认值下面的字符集,
将其换为:使用多字节字符集就可以了,运行成功。

C++:不能将 char 数组添加到双端队列?

【中文标题】C++:不能将 char 数组添加到双端队列?【英文标题】:C++: Can't add a char array to a deque? 【发布时间】:2021-11-20 07:40:33 【问题描述】:

我正在尝试将 char[] 数组添加到双端队列,但是当我执行以下代码时:

#include <iostream>
#include <queue>
#include <deque>
#include <string>
#include <unistd.h>

using namespace std;

int main(int argc, char *argv[])
    deque<char[]> q;
    char buffer[2];
    buffer[0] = 'a';
    buffer[1] = 'b';

    q.push_back(buffer);

    return 0;

我收到以下错误:

test.cpp: In function ‘int main(int, char**)’:
test.cpp:14:23: error: no matching function for call to ‘std::deque<char []>::push_back(char [2])’
   14 |     q.push_back(buffer);

这看起来很奇怪,考虑到我可以将 stringsints 等其他数据类型添加到双端队列就好了。

【问题讨论】:

您希望char[] 是什么? 管理可变长度数组使用std::vector&lt;T&gt; 【参考方案1】:

这似乎很奇怪,考虑到我可以将字符串和整数等其他数据类型添加到双端队列中就好了。

仅仅因为您可以在双端队列中存储某些类型的元素并不一定意味着您可以在双端队列中存储任何类型的元素。元素类型必须满足一些要求。数组不满足这些要求。您不能将数组存储为双端队列的元素。 buffer 是一个数组。它不能是双端队列的元素。

您可以将类实例存储为元素(尽管存在限制)在双端队列中,并且您可以将数组存储为类的成员。因此,您可以将此类数组包装类存储为双端队列的元素。标准库为这种数组包装器提供了一个模板。它被称为std::array。示例:

std::deque<std::array<char, 2>> q;
std::array<char, 2> buffer;
buffer[0] = 'a';
buffer[1] = 'b';

q.push_back(buffer);

附: std::array 是唯一允许将数组存储为元素的标准容器模板。

【讨论】:

【参考方案2】:

如果您想使用可变长度数组,您可以使用内置的 std::vector&lt;T&gt; 类型,就像使用 std::deque&lt;T&gt; 一样:

#include <deque>
#include <vector>

int main(int argc, char *argv[])

    std::deque<std::vector<char>> q;

    std::vector<char> buffer;
    buffer.push_back('a');
    buffer.push_back('b');

    q.push_back(buffer);

    return 0;

【讨论】:

以上是关于C++ 编译时提示:不能将参数 1 从“char [6]”转换为“LPCTSTR”的主要内容,如果未能解决你的问题,请参考以下文章

QML和C++混合编程中,在qml中向C++的char* 函数传递一个char*的字符串参数,qml不能识别char*的参数类型

c++ uint32 如何转 const char

C++ 我将一个const char*的字符串转换为string出错

为啥将字符串文字传递给 char* 参数有时只是编译器错误?

error C2664: “CreateFileW”: 不能将参数 1 从“char *”转换为“LPCWSTR”

在编译时将参数传递给主函数