Messi_Seven 2023-02-18 16:40 采纳率: 33.3%
浏览 97
已结题

error: invalid conversion from 'wchar_t*' to 'TCHAR' {aka 'char'} [-fpermissive]怎么解决

使用easyx编辑一个输出按钮以及文字的函数,在outtextxy行处出现了报错:error: invalid conversion from 'wchar_t*' to 'TCHAR' {aka 'char'} [-fpermissive]。这应该怎么解决?

typedef struct btNode
{
    int x,y;
    wchar_t text[20];
}btNode;

void drawBtn(btNode t);

btNode leftMen[3]=
{
    {5,5, L" 考试科目 "},
    {5,35,L" 考试历史记录 "},
    {5,65,L" 设置 "}

};

void drawBtn(btNode t)
{
    setfillcolor(BLACK);
    fillroundrect(t.x,t.y,t.x+140,t.y+20,10,10);
    outtextxy(t.x+2,t.y+1,t.text);//报错的地方
}

void drawLeft()
{
    SetWorkingImage(&leftImg);//设置绘图目标为 leftImg 对象
    setbkcolor(RGB(204, 224, 251));//绘图目标设置颜色
    cleardevice();//使用当前背景色清空绘图设备。

    //绘制按钮
    for(int i=0;i<3;i++)
    {
        drawBtn(leftMen[i]);
    }


    SetWorkingImage();//回到初始绘图窗口
    putimage(0,0,&leftImg);//在当前窗口坐标(0,0)处输出leftImg图像
}

img

  • 写回答

1条回答 默认 最新

  • CodeBytes 2023-02-18 16:53
    关注

    该回答引用ChatGPT
    在EasyX中,outtextxy 函数的第三个参数的类型是 TCHAR,而 wchar_t* 类型的数据不是 TCHAR 类型的,因此编译器提示错误。

    为了解决这个问题,你需要将 wchar_t* 类型的数据转换为 TCHAR 类型的数据,可以使用 wctomb 函数或者 MultiByteToWideChar 函数将其转换为 char* 类型的数据,再将 char* 类型的数据转换为 TCHAR 类型的数据。具体实现可以参考以下代码:

    
    #include <Windows.h>
    #include <tchar.h>
    #include <easyx.h>
    
    typedef struct btNode
    {
        int x, y;
        wchar_t text[20];
    }btNode;
    
    void drawBtn(btNode t);
    
    btNode leftMen[3] =
    {
        { 5,5, L" 考试科目 " },
        { 5,35,L" 考试历史记录 " },
        { 5,65,L" 设置 " }
    
    };
    
    void drawBtn(btNode t)
    {
        setfillcolor(BLACK);
        fillroundrect(t.x, t.y, t.x + 140, t.y + 20, 10, 10);
        char buf[256];
        int len = WideCharToMultiByte(CP_ACP, 0, t.text, wcslen(t.text), buf, sizeof(buf), NULL, NULL);
        buf[len] = 0;
        outtextxy(t.x + 2, t.y + 1, _T(buf));
    }
    
    void drawLeft()
    {
        SetWorkingImage(NULL);
        IMAGE leftImg;
        GetImage(&leftImg, 0, 0, 150, 600);
        SetWorkingImage(&leftImg);
        setbkcolor(RGB(204, 224, 251));
        cleardevice();
    
        //绘制按钮
        for (int i = 0; i < 3; i++)
        {
            drawBtn(leftMen[i]);
        }
    
    
        SetWorkingImage(NULL);
        putimage(0, 0, &leftImg);
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月26日
  • 已采纳回答 2月18日
  • 创建了问题 2月18日

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系