首页 > 解决方案 > 为什么编译器给出未定义的引用错误

问题描述

我有一个头文件定义db.hpp如下:

#ifndef PMT_DB_H
#define PMT_DB_H

#include <leveldb/db.h>
#include <vector>
#include <map>

class DBConnection {
    private:
        std::string db_file_;
        leveldb:: DB* db_;
        leveldb::Status status_;
        std::map<std::string, std::string> uncommitted_;

    public:
        DBConnection(const std::string &db_file);
        // Other functions
};

#endif

我的db.cpp班级如下:


#include "db.hpp"

#include <leveldb/write_batch.h>
#include <string>


DBConnection::DBConnection(const std::string &db_file) {
    db_file_ = db_file;

    leveldb::Options options;
    options.create_if_missing = true;

    status_ = leveldb::DB::Open(options, db_file, &db_);
}

 // other functions

这是我的主文件的patricia-merkle-trie.cpp样子:


#include <iostream>

#include "core/db.hpp"

void say_hello(){
    std::cout << "Hello, from patricia-merkle-trie!\n";
}

int main() {
    say_hello();

    const std::string db_path_ {"/tmp/testdb"};
    DBConnection db_connection = DBConnection(db_path_);
    // Rest of the code
}

我尝试使用以下命令编译它:

g++ patricia-merkle-trie.cpp -o pmt_test -pthread -L/usr/local/lib -lleveldb -std=c++14 

它给了我如下错误:

/tmp/ccH2lHTf.o: In function `main':
patricia-merkle-trie.cpp:(.text+0x87): undefined reference to `DBConnection::DBConnection(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status

我知道这是一个链接器错误,但不明白为什么会出现这个错误。我已经将内容字符串定义为构造函数的参数,构造函数的定义和声明完全一样。那么为什么它将对构造函数的调用显示为两个参数化的呢?

标签: c++c++14leveldb

解决方案


推荐阅读