Я сгенерировал разделяемую библиотеку, которая оборачивает функции MySQL C API. У него есть файлы sample.h и sample.cpp, подобные этому
using namespace std;
class MysqlInstance
{
protected:
string user;
string password;
string socket;
int port;
public:
MySqlInstance(string,string,string,port);
int connectToDB();
}
В sample.cpp
MySqlInstance::MySqlInstance(string user,string pass,string sock,int port)
{
this->port=port;
this->user=user;
this->password=pass;
this->socket=sock;
}
MySqlInstance::connectToDB()
{
//code to load libmysqlclient.so from /usr/lib64 and use mysql_init and mysql_real_connect
// functions to connect and "cout" that connection is successful
}
Используемый:
g ++ -fPIC -c sample.cpp mysql_config --cflags
g ++ -shared -Wl, -soname, libsample.so -o libsample.so sample.o mysql_config --libs
Теперь генерируется libsample.so, и я переместил его в / usr / lib
Теперь я создал небольшой файл cpp, который использует эту общую библиотеку в том же каталоге.
usesample.cpp
#include "sample.h"using namespace std;
int main()
{
MysqlInstance* object=new MySQlInstance("root","toor","/lib/socket",3306);
}
Используемый:
Это дает мне эту ошибку:
ошибка: «MySQLInstance» не был объявлен в этой области
ошибка: объект не был объявлен в этой области
Спасибо
У вас есть несколько ошибок. Во-первых, это объявление конструктора
MySqlInstance(string,string,string,port);
Вы, наверное, имеете в виду
MySqlInstance(string,string,string,int);
Затем, определение, у вас есть тип port
неправильно:
MySqlInstance::MySqlInstance(string user,string pass,string sock,string port) { .... }
// ^ should be int
Затем имя класса
class MyqllInstance { .... };
должно быть
class MySqlInstance { .... };
Затем вы используете MySQlInstance
в main
но твой класс MySqlInstance
,
Помните, C ++ не чувствителен к регистру.
Наконец не ставь using namespace std
в заголовочном файле. На самом деле не ставьте его никуда.
Ну, твой класс называется MysqlInstance
но в вашем main () вы называете это MySQlInstance
и в вашей реализации cpp у вас есть MySqlInstance
,
C ++ чувствителен к регистру, поэтому убедитесь, что вы используете правильный идентификатор везде.