с ++ & quot; не было объявлено в этой области видимости ошибки при использовании разделяемой библиотеки, сгенерированной MySQL C API

Я сгенерировал разделяемую библиотеку, которая оборачивает функции 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);
}

Используемый:

  • g ++ -c использует sample.cpp -lsample

Это дает мне эту ошибку:

ошибка: «MySQLInstance» не был объявлен в этой области
ошибка: объект не был объявлен в этой области

Спасибо

-2

Решение

У вас есть несколько ошибок. Во-первых, это объявление конструктора

 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 в заголовочном файле. На самом деле не ставьте его никуда.

0

Другие решения

Ну, твой класс называется MysqlInstance но в вашем main () вы называете это MySQlInstanceи в вашей реализации cpp у вас есть MySqlInstance,

C ++ чувствителен к регистру, поэтому убедитесь, что вы используете правильный идентификатор везде.

1

По вопросам рекламы [email protected]