0

Linuxでのプログラミングとターミナルでのコンパイルは初めてです。私は3つのファイルを持っています:

sql.h

#ifndef SQL_H
#define SQL_H

#include "sqlite3.h"
#include <string>

class sqlite{
    
private:
    sqlite3 *db;
    sqlite3 *statement;
    
public:
    sqlite(const char* filename);
    void create_table();
};


#endif

sql.cpp

  #include "sql.h"
#include <iostream>

sqlite::sqlite(const char* filename){
    if((sqlite3_open_v2(filename, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL)) == SQLITE_OK) //fájl létrehozása
        std::cout << "Database has been created successfully!" << std::endl;
    
    else{
        std::cout << "Oops, something went wrong, please try again!" << std::endl;  
    }
}   


void sqlite::create_table(/*const std::string &tableName, const std::string &columnNames*/){

    //std::string command = "CREATE TABLE " + tableName + columnNames;
    sqlite3_prepare_v2(db, "CREATE TABLE a (a INTEGER, b INTEGER)", -1, &statement, NULL);
    sqlite3_step(statement);
    sqlite3_finalize(statement);
    sqlite3_close(db);

}

main.cpp

#include "sql.h"
#include <string>
int main(){
    
    sqlite s = sqlite("database.db");
    s.create_table();
    return 0;
}

そして、コマンドでコンパイルしようとすると g++ -Wall -Werror main.cpp -lsqlite3 -o sqlite_program、エラーが発生しました:

/tmp/ccKtrrtg.o: In function `main':
main.cpp:(.text+0x15): undefined reference to `sqlite::sqlite(char const*)'
main.cpp:(.text+0x21): undefined reference to `sqlite::create_table()'

これは初めてです。カスタム ヘッダーを使用して cpp をコンパイルしようとしています。たぶん、別のコマンドでそれを行う必要がありますか?

更新: コードを更新しました。バグがありました。:) 今では動作します!

4

2 に答える 2

4

これを実行してみてください

g++ -Wall -Werror main.cpp sql.cpp -lsqlite3 -o sqlite

これにより、sql.cpp ファイルがコンパイルされ、実行可能ファイルにリンクされます。

于 2013-07-22T20:54:07.640 に答える