Ubuntu下编译C++ RocksDB代码报错‘options does not name a type’求解决
问题解答
报错原因
你遇到的报错和RocksDB的Options结构体定义无关,问题出在C++语法规则限制:
Options options;是变量定义语句,可以放在全局作用域(函数外部)- 但
options.create_if_missing = true;是赋值执行语句,不允许直接写在函数外的全局作用域,所有执行逻辑必须放在函数体内部才能被执行。
修复方案
最常用的修复方式是把所有RocksDB初始化逻辑放到main函数内,修改后代码如下:
#include "rocksdb/db.h" #include <cassert> using namespace rocksdb; int main() { DB* db; Options options; options.create_if_missing = true; rocksdb::Status status = rocksdb::DB::Open(options, "/tmp/testdb", &db); assert(status.ok()); // 你的业务逻辑写在这里 // 程序退出前释放db资源 delete db; return 0; }
如果你确实需要保留options为全局变量,可以通过lambda表达式在全局变量定义阶段完成属性初始化,避免单独写赋值语句:
#include "rocksdb/db.h" #include <cassert> using namespace rocksdb; DB* db; // 全局初始化 Options options = [](){ Options opt; opt.create_if_missing = true; return opt; }(); int main() { rocksdb::Status status = rocksdb::DB::Open(options, "/tmp/testdb", &db); assert(status.ok()); delete db; return 0; }
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

