Функции коннектора mysql C не работают при определении в классе - PullRequest
0 голосов
/ 18 апреля 2019

Я пытался реализовать функции в MySQL C-разъем из класса «Сервер» в моем проекте.Вот как выглядит конструктор класса: (DATABASE и SOCKET #defined).

Server::Server(MYSQL& conn)
{
    mysql_init(&conn);
    mysql_real_connect(&conn,"localhost","username","passwd",DATABASE,0,SOCKET,0);
    if (mysql_real_connect(&conn,"localhost","santu","hello",DATABASE,0,SOCKET,0) == NULL) {
        cout << mysql_error(&conn) << endl;
    }
    else
    {
        cout << "Connected." << endl;
    }
}

Когда я пытаюсь вызвать класс из "main.cpp" с дескриптором соединения, это вызывает ошибку.

Cannot connect twice. Already connected.

но если методы были написаны вне класса, он работает без нареканий.По сути, это работает.

#include "Server.hxx"

MYSQL san;

int main(int argc, char** argv)
{
    mysql_init(&san);
    mysql_real_connect(&san,"localhost","santu","hello", "test",0,"/tmp/mysql.sock",0);
    cout << mysql_error(&san) << endl;
    return 0;
}

Но это не так и не получается с вышеупомянутой ошибкой.

#include "Server.hxx"

MYSQL san;

int main(int argc, char** argv)
{
    Server S0(san);
    return 0;
}

1 Ответ

1 голос
/ 18 апреля 2019

В своем определении функции класса вы вызываете mysql_real_connect дважды:

mysql_real_connect(&conn,"localhost","username","passwd",DATABASE,0,SOCKET,0);
if (mysql_real_connect(&conn,"localhost","santu","hello",DATABASE,0,SOCKET,0) == NULL) {

Просто удалите первую строку, и она будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...