获取从 'char' 到 'const char*' 的无效转换 [-fpermissive] 错误
Getting invalid conversion from 'char' to 'const char*' [-fpermissive] error
我正在尝试比较字符串的第一个字符以查看它是否匹配,如果匹配,我想设置剪贴板数据。该字符串来自 getclipboard 函数并设置为 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
但我得到了同样的错误。
我遇到的另一个问题是程序只运行一次,即只显示剪贴板的内容,当我复制不同的文本时,它不会显示。
TL;DR:更改
if(data[0] == "1" || data[0] == "7")
到
if(data[0] == '1' || data[0] == '7')
data
是一个 char*
,所以用 data[0]
取消引用它会给你一个 char
。 "1"
是长度为 1 的字符串 (char*
),这将导致 char
与 char*
的无效比较(参见错误)。
您可能想要的是字符 '1'
。我们用单引号表示 C++ 中的字符文字。
我正在尝试比较字符串的第一个字符以查看它是否匹配,如果匹配,我想设置剪贴板数据。该字符串来自 getclipboard 函数并设置为 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
但我得到了同样的错误。
我遇到的另一个问题是程序只运行一次,即只显示剪贴板的内容,当我复制不同的文本时,它不会显示。
TL;DR:更改
if(data[0] == "1" || data[0] == "7")
到
if(data[0] == '1' || data[0] == '7')
data
是一个 char*
,所以用 data[0]
取消引用它会给你一个 char
。 "1"
是长度为 1 的字符串 (char*
),这将导致 char
与 char*
的无效比较(参见错误)。
您可能想要的是字符 '1'
。我们用单引号表示 C++ 中的字符文字。