vs2013 提示无法从void转换为char
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs2013 提示无法从void转换为char相关的知识,希望对你有一定的参考价值。
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char* ch;
QByteArray ba = str.toLatin1();
ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str(); 参考技术A 是不是你的方法没有返回值
错误 C2440:“static_cast”:无法从“void (__thiscall Visualizza::*)(char [])”转换为“AFX_PMSG”
【中文标题】错误 C2440:“static_cast”:无法从“void (__thiscall Visualizza::*)(char [])”转换为“AFX_PMSG”【英文标题】:error C2440: 'static_cast' : cannot convert from 'void (__thiscall Visualizza::* )(char [])' to 'AFX_PMSG' 【发布时间】:2020-12-01 12:36:07 【问题描述】:有人可以帮助我吗? 我正在通过 VS 2010 Ultimate 做一个 MFC 应用程序。 附言。我是 C++ 的新手。 此应用程序用于在组合框文件名上打印。
这是 .cpp 文件
BEGIN_MESSAGE_MAP(Visualizza, CDialogEx)
ON_CBN_SELCHANGE(IDC_COMBO1, &Visualizza::OnCbnSelchangeCombo1)
END_MESSAGE_MAP()
// Visualizza message handlers
void Visualizza::OnCbnSelchangeCombo1(char util[20])
std::string s = util;
LPTSTR x = new TCHAR[s.size() + 1];
stampa.AddString(x);
这是.h文件
#pragma once
#include "afxwin.h"
// Visualizza dialog
class Visualizza : public CDialogEx
DECLARE_DYNAMIC(Visualizza)
public:
Visualizza(CWnd* pParent = NULL); // standard constructor
virtual ~Visualizza();
// Dialog Data
enum IDD = IDD_DIALOG1 ;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnCbnSelchangeCombo1(char util[20]);
CComboBox stampa;
;
【问题讨论】:
在哪一行发现错误? 正确的原型是afx_msg void OnCbnSelchangeCombo1()
- 没有参数。如果更改选择将项目添加到组合框中也会非常令人惊讶,因此您可能应该重新考虑您的方法。
这里的错误是 ON_CBN_SELCHANGE(IDC_COMBO1, &Visualizza::OnCbnSelchangeCombo1)
@molbdnilo 我该怎么办?
使用具有适当原型的函数。您可能还应该多学习,少猜测。
【参考方案1】:
CComboBox
文档的Remarks 部分解释了注册通知处理程序。尤其需要遵守以下几点:
父函数原型如下:
afx_msg void memberFxn( );
换句话说:您的用户提供的通知处理程序不能接受任何参数。
void Visualizza::OnCbnSelchangeCombo1(char util[20])
需要改成
void Visualizza::OnCbnSelchangeCombo1()
使其与ON_CBN_SELCHANGE(IDC_COMBO1, &Visualizza::OnCbnSelchangeCombo1)
消息映射条目兼容。
【讨论】:
以及如何从组合框中获取新选择的项目? @dia 作为documented,您可以使用GetLBText
。如果您对所选索引感兴趣,请致电CComboBox::GetCurSel。以上是关于vs2013 提示无法从void转换为char的主要内容,如果未能解决你的问题,请参考以下文章
错误 C2440:“static_cast”:无法从“void (__thiscall Visualizza::*)(char [])”转换为“AFX_PMSG”
VS2013 保存项目出错,提示:未能完成操作。不支持此接口
error C2440: “static_cast”: 无法从“void (__thiscall CMainFrame::* )