繁体   English   中英

从“char”到“const char*”的无效转换 [-fpermissive] 错误

[英]Getting invalid conversion from 'char' to 'const char*' [-fpermissive] error

我正在尝试比较字符串的第一个字符以查看它是否匹配,如果匹配,我想设置剪贴板数据。 该字符串来自 getclipboard function 并设置为 const char* 数据,我试图将其设置为 std::string 但我得到了一个不同的错误。 这是我的 Clipboard.cpp

#include <iostream>
#include <windows.h>
#include <cstring>

namespace Diall_ClipBoard_catch
{
    class ClipBoard
    {
    private:
        ::HANDLE dHDat;
        ::std::string tmpstringsign;
        bool isopen;
        char* dHbuffer;
        char* dHbuffertemp;
        char* dNtoken;
    public:
        ClipBoard(void)
        {
            this->dHbuffer = const_cast <char*>("");
            this->dHbuffertemp = const_cast <char*>("");
            this->tmpstringsign = "dnb_4554_2102";
            this->isopen = false;
        };
        ~ClipBoard(void)
        {

        }
        char* GetData(void)
        {
            this->Start();
            if (this->isopen)
            {
                this->dHDat = ::GetClipboardData(CF_TEXT);

                if (this->dHDat)
                {
                    this->dHbuffer = (char*)::GlobalLock(this->dHDat);

                    if (::std::strcmp(this->dHbuffertemp, this->dHbuffer) != 0 && this->dHbuffer != "" && this->dHbuffer != NULL)
                    {
                        this->dHbuffertemp = this->dHbuffer;
                        //::std::cout << this->dHbuffer << "\n";
                        return this->dHbuffer;
                    }

                    ::GlobalUnlock(this->dHDat);
                }
                CloseClipboard();
                this->isopen = FALSE;
                ::Sleep(1000);
            }
        }
        void SetData(void)
        {
            const char* data = this->dHbuffer;
            const char* newstring = "Hello World";
            const size_t len = strlen(newstring) + 1;
            HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
            memcpy(GlobalLock(hMem), newstring, len);
            GlobalUnlock(hMem);
            if (!OpenClipboard(NULL))
            {
                return;
            }
            if (strlen(data) == 8)
            {
                    if(data[0] == "1" || data[0] == "7")
                    {
                        EmptyClipboard();
                        SetClipboardData(CF_TEXT, hMem);
                    }
            }
            CloseClipboard();
            this->isopen = TRUE;
        }
    private:
        void Start(void)
        {
            if (!OpenClipboard(NULL))
            {
                return;
            }
            this->isopen = true;
        }
    };
}

这是我的 main.cpp

#include "Clipboard.h"

int main()
{
    ::Diall_ClipBoard_catch::ClipBoard* clipboard = new Diall_ClipBoard_catch::ClipBoard();
    int temp1 = 0, temp2 = 0;
    EmptyClipboard();
    while (1)
    {
        temp1 = GetClipboardSequenceNumber();
        if (temp1!= temp2)
        {
            clipboard->SetData();
            std::cout << clipboard->GetData() << std::endl;
        }

        temp2 = temp1;
    }
    return 0;
}

我试着改变

data[0] = "1"

strcmp(data[0], 1) == 0

但我得到了同样的错误。

我遇到的另一个问题是程序只运行一次,因为只显示剪贴板的内容,当我复制不同的文本时,它不会显示。

长话短说:改变

if(data[0] == "1" || data[0] == "7")

if(data[0] == '1' || data[0] == '7')

data是一个char* ,所以用data[0]取消引用它会给你一个char "1"是长度为 1 的字符串 ( char* ),这将导致charchar*的比较无效(请参阅错误)。

您可能想要的是字符'1' 我们用单引号表示 C++ 中的字符文字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM