上述代码怎么修改才能避免以下错误 error: non-const lvalue reference to type 'QPixmap' cannot bind to a temporary of type 'QPixmap'
时间: 2024-02-15 11:02:52 浏览: 35
这个错误是因为你尝试将一个临时对象(temporary object)绑定到一个非 const 的 lvalue 引用上,而 C++ 不允许这样做。
要避免这个错误,你可以将 QPixmap 对象声明为一个 const 引用,或者使用值传递的方式。例如,将代码修改为:
```
QPixmap newPixmap(this->width() + 1, this->width() + 1);
bg.swap(newPixmap);
```
这里我们先创建一个新的 QPixmap 对象 newPixmap,并将其大小设置为 (this->width() + 1, this->width() + 1)。然后通过 swap 函数将 bg 对象和 newPixmap 对象进行交换。这样就避免了使用临时对象导致的编译错误。
相关问题
non-const lvalue reference to type ‘share_ptr' cannot bind to a temporary of type 'share_ptr
这个错误通常是因为您试图将一个临时对象绑定到一个非 const 引用上。共享指针(`shared_ptr`)是一种智能指针,它内部包含了一个计数器来记录有多少个指针指向同一个对象。当您尝试将一个临时对象传递给一个非 const 引用时,编译器会发出以上错误信息,因为这样做可能会破坏计数器的正确性,导致内存泄漏或其他问题。
解决这个问题的方法是将引用声明为 const,或者将临时对象复制到一个命名的变量中,然后将该变量传递给函数。例如:
```cpp
void foo(const std::shared_ptr<int>& ptr) {
// ...
}
int main() {
foo(std::make_shared<int>(42)); // OK
auto ptr = std::make_shared<int>(42);
foo(ptr); // OK
return 0;
}
```
在上面的例子中,我们将 `foo` 函数的参数声明为 const 引用,以确保它不会修改内部计数器。同时,我们使用 `std::make_shared` 创建一个新的 `shared_ptr<int>` 对象,并将其作为参数传递给 `foo` 函数。另外,我们还定义了一个名为 `ptr` 的变量,将 `std::make_shared<int>(42)` 的返回值复制到变量中,然后将 `ptr` 作为参数传递给 `foo` 函数。
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
这个错误通常发生在将字符数组传递给函数期望指向非常量字符的非常量字符指针参数时。在这种情况下,编译器会产生错误,因为字符数组不是指向非常量字符的指针,而是一个常量指针。
为了解决这个问题,请将函数参数声明为指向常量字符的指针,或将字符数组转换为指向非常量字符的指针。在这种情况下,将函数参数声明为指向常量字符的指针是更好的选择,因为这可以防止函数修改传递给它的数据。
例如,在database.h文件中,您可以将函数声明更改为:
```cpp
bool executeQuery(const char* const sql);
```
然后,在widget.cpp文件中,您可以将字符串字面量传递给executeQuery函数,如下所示:
```cpp
if(!database.executeQuery("SELECT * FROM myTable")) {
//处理错误
}
```
这应该会解决这个问题。