我目前正在尝试调用sqlite3库函数,它希望我传递一个sqlite3**
。
这是我的当前代码。有一部分可以工作,还有一部分给我一个错误:
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()) ))
{
}
我的m_db
字段看起来像这样:
std::unique_ptr<sqlite3> m_db = nullptr;
在我展示的两个例子中,第一个完全正常工作。然而,第二个给了我这个错误。请注意,这是来自&(m_db.get())
部分:
“Address expression must be an lvalue or a function designator”
我稍微了解了一下左值和右值,但似乎无法理解为什么这个语法不可行。据我目前的理解,问题在于.get()操作的返回值只是一个临时表达式结果,因此没有一个可识别的内存位置,我可以从中获取地址。
我猜必须有一种方法可以在一个语句中实现这一点。
有人可以向我解释一下为什么这不起作用,以及我如何可能修复它吗?
m_dbName
做奇怪的事情? - M.M