widget.cpp:135:19: error: non-const lvalue reference to type 'char *' cannot bind to a value of unrelated type 'char [128]' database.h:16:24: note: passing argument to parameter 'sql' here
时间: 2024-02-16 09:00:22 浏览: 132
这个错误通常发生在将字符数组传递给函数期望指向非常量字符的非常量字符指针参数时。在这种情况下,编译器会产生错误,因为字符数组不是指向非常量字符的指针,而是一个常量指针。
为了解决这个问题,请将函数参数声明为指向常量字符的指针,或将字符数组转换为指向非常量字符的指针。在这种情况下,将函数参数声明为指向常量字符的指针是更好的选择,因为这可以防止函数修改传递给它的数据。
例如,在database.h文件中,您可以将函数声明更改为:
```cpp
bool executeQuery(const char* const sql);
```
然后,在widget.cpp文件中,您可以将字符串字面量传递给executeQuery函数,如下所示:
```cpp
if(!database.executeQuery("SELECT * FROM myTable")) {
//处理错误
}
```
这应该会解决这个问题。
相关问题
error: non-const lvalue reference to type 'std::string' (aka 'basic_string<char>') cannot bind to a value of unrelated type 'char *'
这个错误信息表明你在C++中尝试将一个非常量引用(lvalue reference,即可以修改其绑定的变量)绑定到一个不属于同一类型的值上,这里是一个字符串类型`std::string`试图绑定到一个字符指针`char *`。在C++中,你不能直接把一个字符串引用赋给一个字符指针,因为它们不是兼容的数据类型。
例如,下面的代码会引发此类错误:
```cpp
std::string str = "Hello";
char* ptr = &str; // 错误,不能这样做
```
正确的做法应该是转换类型,如使用`std::strcpy`函数复制字符串内容到字符数组,或者如果需要指向字符串的内容,应该使用`std::string`的成员函数获取`const char *`:
```cpp
std::string str = "Hello";
char* ptr = new char[strlen(str) + 1]; // 或者更安全地使用 strncpy
std::copy(str.begin(), str.end(), ptr);
// 使用完后别忘了删除动态分配的内存
delete[] ptr;
```
阅读全文