Tôi hiện đang cố gắng gọi hàm thư viện sqlite3, và nó hy vọng tôi chuyển nó qua số sqlite3**
.Đưa con trỏ đến một đối tượng được trỏ tới bởi con trỏ thông minh - Lỗi Ivalue
Đây là mã hiện tại của tôi. Tôi có một phần làm việc, và một phần đó mang lại cho tôi một lỗi:
sqlite3 *sqlite = m_db.get();
if (sqlite3_open(std::string(m_dbName.begin(), m_dbName.end()).c_str(), &sqlite))
{
}
if (sqlite3_open(std::string(m_dbName.begin(), m_dbName.end()).c_str(), &(m_db.get())))
{
}
lĩnh vực m_db
của tôi trông như thế này:
std::unique_ptr<sqlite3> m_db = nullptr;
Trong hai ví dụ tôi hiển thị, người đầu tiên được làm việc hoàn toàn tốt đẹp . Tuy nhiên, thứ hai mang lại cho tôi lỗi này. Lưu ý rằng đây là đến từ phần &(m_db.get())
:
“Address expression must be an lvalue or a function designator”
Tôi đọc lên một chút về lvalues và rvalues, nhưng tôi dường như không thể tìm ra lý do tại sao cú pháp này sẽ không thực hiện được. Theo như tôi hiểu bây giờ, vấn đề là giá trị trả về của hoạt động .get() chỉ đơn thuần là một kết quả biểu thức tạm thời, và do đó không có vị trí nhận dạng trong bộ nhớ mà tôi có thể lấy địa chỉ từ đó.
Có một cách để đạt được điều này trong một tuyên bố, tôi đoán vậy.
Bất cứ ai có thể giải thích cho tôi lý do tại sao tính năng này không hoạt động và cách tôi có thể khắc phục?
tại sao bạn làm những thứ lạ với 'm_dbName' –
Đó là một wstring tôi đang chuyển đổi thành một chuỗi – Sossenbinder
Đó là khá tinh ranh –