0

Помогите разобраться, откуда появляются ошибки и как их исправить (ошибки на копии экрана). error

#include <iostream>
#include <vector>
#include <ctime>
#include <stdio.h>
#include <conio.h>
#include "MySQL Server 5.7\include\mysql.h"
using namespace std;
const int INF = INT_MAX / 2;
const int n = 7;
const int buf = 512;
struct Edge
{
    int start;
    int finish;
    int weight;
};

vector<Edge> e; //Все ребра в графе
vector<int> d(n,
              INF); //Расстояния от заданной вершины равны бесконечности
vector<int> path[n]; //Все пути

void mysql(const char query[])
{
    MYSQL mysql; // Дескриптор соединения
    MYSQL_ROW row; // Массив полей текущей строки
    MYSQL_RES* res; // Дескриптор результирующей таблицы
    MYSQL_FIELD* field;
    char host[] = "localhost"; // хост
    char user[] = "root"; // пользователь
    char passwd[] = "34784h0417"; // пароль
    char db[] = "test_db"; // название базы данных
    int port =
        0; //  порт. Если порт у сервера MySQL не по умолчанию (3306), то нужно указывать конкретный номер порта
    mysql_init(&mysql);  // Инициализация
    mysql_real_connect(&mysql, host, user, passwd, db, port, NULL,
                       0); // соединение

    if (mysql_query(&mysql,
                    query) > 0) // запорс. Если ошибок нет, то продолжаем работу
    {
        // Если была ошибка, ...
        printf("%s", mysql_error(&mysql));  // ... вывдем ее
        return; // и завершим работу
    }

    res = mysql_store_result(&mysql); // Берем результат,
    int num_fields = mysql_num_fields(res); // количество полей
    int num_rows = mysql_num_rows(res); // и количество строк.

    for (int i = 0; i < num_fields; i++) // Выводим названия полей
    {
        field = mysql_fetch_field_direct(res,
                                         i); // Получение названия текущего поля
        printf("| %s |", field->name);
    }

    printf("\n");

    for (int i = 0; i < num_rows; i++) // Вывод таблицы
    {
        row = mysql_fetch_row(res); // получаем строку

        for (int l = 0; l < num_fields; l++)
            printf("| %s |", row[l]); // Выводим поля

        printf("\n");
    }

    printf("Count records = %d",
           num_rows); // Вывод информации о количестве записей
    mysql_free_result(res); // Очищаем результаты
    mysql_close(&mysql); // Закрываем соединение
}
int main()
{
    mysql("SELECT * FROM graph"); // Запрос
    int f, v;
    setlocale(0, "");
    /*Ввод матрицы смежности*/
    int G[n][n] =
    {
        { 0, 1, 2, 3, 4, 5, 6 }
        , { 1, 0, 2, 2, 5, 6, 7 }
        , { 2, 2, 0, 0, 4, 0, 0 }
        , { 3, 2, 0, 0, 2, 2, 0 }
        , { 4, 5, 4, 2, 0, 0, 2 }
        , { 5, 6, 0, 2, 0, 0, 8 }
        , { 6, 7, 0, 0, 2, 8, 0 }
    };

    /*Заполнение матрицы*/
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (G[i][j] != 0)
            {
                e.push_back({ i, j, G[i][j] });
            }
        }
    }

    cout << "Введите начальную вершину: ";
    cin >> v;

    if (v != 1 && v != 2 && v != 3 && v != 4 && v != 5 && v != 6 &&
            v != 7)
    {
        cout << "Неправильно введены данные \n";
    }

    cout << "Введите конечную вершину: ";
    cin >> f;

    if (f != 1 && v != 2 && v != 3 && v != 4 && v != 5 && v != 6 &&
            v != 7)
    {
        cout << "Неправильно введены данные \n";
    }

    v--;
    d[v] = 0;
    float start_time = clock();

    for (int i = 0; i < n; i++) path[i].push_back(v);

    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < e.size(); j++)
        {
            if (d[e[j].start] < INF)
            {
                if (d[e[j].finish] > d[e[j].start] + e[j].weight)
                {
                    d[e[j].finish] = d[e[j].start] + e[j].weight;
                    path[e[j].finish] = path[e[j].start];
                    path[e[j].finish].push_back(e[j].finish);
                }
            }
        }
    }

    float end_time = clock();
    float search_time = end_time - start_time;
    cout << endl;

    /*Вывод*/
    for (int i = 0; i < n; i++)
    {
        if (f == (i + 1))
        {
            cout << "Наименьшее расстояние из вершины (" << v + 1 <<
                 ") в вершину (" << i + 1 << ") = " << d[i] << endl;
            cout << "Путь: " << path[i][0] + 1;

            for (int j = 1; j < path[i].size(); j++)
            {
                cout << "-" << path[i][j] + 1;
            }
        }

        cout << endl << endl;
    }

    cout << "Время работы алгоритма: " << search_time / CLOCKS_PER_SEC <<
         "сек" << endl;
    system("pause");
}
Harry
  • 221,325
Vladislav
  • 147
  • 1
    у Вас ошибки при линковке. То есть, нужно просто линковщику подсказать, где лежат либы. Скорее всего просто добавить в строку компиляции что то вида -lmysql – KoVadim Dec 16 '16 at 11:18
  • Сообщений нет. И в любом случае они нужны текстом – Владимир Мартьянов Dec 16 '16 at 11:39
  • Меня почему-то смущает путь к хэдеру - MySQL Server 5.7\include\mysql.h - где начало то ? Скажем, C:\Programm Files\..? – isnullxbh Dec 16 '16 at 11:53
  • И еще вопрос - Вы вообще либу подключали для работы с mysql ? – isnullxbh Dec 16 '16 at 12:02
  • @isnullxbh, подключать хедеры по абсолютному пути? Вы серьёзно? – c4pQ Dec 16 '16 at 12:41
  • Рекомендую ознакомиться с темой. – αλεχολυτ Dec 16 '16 at 13:07
  • @user1056837, абсолютно. Ну если у него путь к Programm Files в Include Directories проекта добавлен - то конечно, молчу )))) – isnullxbh Dec 16 '16 at 13:39
  • @isnullxbh, я к тому, что подключение по абсолютным путям - плохая практика. Не просто плохая, а отвратительная. Такие задачи должны решаться на уровне инструкций сборки. – c4pQ Dec 17 '16 at 09:35
  • @user1056837, да, согласен. Но Вы видели исходный код, читали мой комментарий - так ни правильнее было бы тогда задать вопрос подключать хедеры по абсолютному пути? Вы серьёзно? Vladislav'у ? – isnullxbh Dec 17 '16 at 10:04
  • И вообще, @Vladislav, где Ваш фидбэк ? Настоящая стюардесса улыбается до конца. Давайте дело до конца доводить, а если у Вас уже все получилось - отпишитесь и скажите, в чем была ошибка. – isnullxbh Dec 17 '16 at 10:06
  • Нашел ответ на http://programmersforum.ru/showthread.php?t=59147 – Vladislav Dec 17 '16 at 14:00
  • Нужно было подключить библиотеку и #define LCC #define _CRT_SECURE_NO_WARNINGS #pragma comment(lib, "libmysql.lib") – Vladislav Dec 17 '16 at 14:00
  • @alexolut Спасибо, ваш ответ очень помог – Vladislav Dec 17 '16 at 14:05

0 Answers0