0

Серьезность Код Описание Проект Файл Строка Состояние подавления Ошибка LNK2019 ссылка на неразрешенный внешний символ "int __cdecl Sort(void)" (?Sort@@YAHXZ) в функции _main. 6 C:\Users\riteps1\Desktop\6\6\6.obj 1

Серьезность Код Описание Проект Файл Строка Состояние подавления Ошибка LNK1120 неразрешенных внешних элементов: 1 6 C:\Users\riteps1\Desktop\6\Debug\6.exe 1

Серьезность Код Описание Проект Файл Строка Состояние подавления Ошибка (активно) E0254 использование имени типа не допускается 6 C:\Users\riteps1\Desktop\6\6\6.cpp 87

// 6.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//

#include <iostream> #include <string> #include <conio.h> #include <windows.h> #include <fstream> #include <clocale> #include <locale> #pragma warning(disable : 4996); using namespace std; #define SIZELST 100 #define FNAME "Text.txt" #define COL 80 #define ROW 20

typedef struct { char Naz[35]; char DataProved[11]; char VremyProved[11]; char AdresProved[35];

char NomLot;
char FioPr[35];
char Pas1[35];
char AdresProdavca[35];
int NomerTePr;

double StarCena;
double FactCena;
char Opisanie[255];

char FioPo[35];
char Pas2[35];
char AdresPokupately[35];
int NomerTePo;


}

TAukcion; TAukcion stud[SIZELST];//массив структур int nst = 0; //число введенных структур //прототипы пользовательских функций int menu(); // главное меню int spisok(); // ввод исходных данных int resc(); //вывод содержимого текстового файла на экран int poisk();//поиск по критериям int delet();// Удаление всех данных из int Sort();

void Sort(TAukcion** q, const int n) { setlocale(LC_CTYPE, "rus");

for (int i = 0; i &lt; n;i++)
{
    for (int j = 0; j &lt; n - i - 1;j++)
    {
        if (strcmp(q[j]-&gt;DataProved, q[j + 1]-&gt;DataProved) &gt; 0)
        {
            TAukcion* temp = q[j];
            q[j] = q[j + 1];
            q[j + 1] = temp;
        }
    }
}

} /////////////////////////////////////////////////////////////////////////////

int main() {

setlocale(LC_CTYPE, &quot;rus&quot;);
while (true)
{
    switch (menu())
    {
    case 1: {spisok(); break; }
    case 2: {resc(); break; }
    case 3: {poisk(); break; }
    case 4: {delet(); break; }
    case 5: {Sort(TAukcion, nst); break; }
    case 0: {return 0; break; }
    default: { cout &lt;&lt; &quot;\nВыберите правильно!\n&quot;; }
    }

    cout &lt;&lt; &quot;\nНажмите любую клавишу для продолжения&quot;;
    _getch();
    system(&quot;cls&quot;);
}
setlocale(LC_CTYPE, &quot;rus&quot;);
_getch();
return 0;

}

/////////////////////////////////////////////////////////////////////////////

int menu() //МЕНЮ { system("color 71"); cout << "________________________________________________________________________________________________________________________"; cout << " "; cout << " Информационная система - Аукционы \n"; cout << "________________________________________________________________________________________________________________________"; cout << "\n" << endl; cout << "\n ВЫБЕРИТЕ ОПЕРАЦИЮ:" << endl; cout << "" << endl; cout << " 1 - Добавить информацию " << endl; cout << " 2 - Просмотр всей информации" << endl; cout << " 3 - Поиск информации по заданному критерию" << endl; cout << " 4 - Удаление данных из текстового файла" << endl; cout << " 0 - Выход " << endl; cout << "" << endl; int i; cin >> i; return i; }

/////////////////////////////////////////////////////////////////////////////

int spisok() // Добавление информации в файл { setlocale(LC_CTYPE, "rus"); SetConsoleCP(1251); //нужна библиотека Windows.h SetConsoleOutputCP(1251);

system(&quot;color 71&quot;);
ofstream outFil(FNAME); // открытие файла для записи и проверка на открытие
if (!outFil)
{
    cout &lt;&lt; &quot;Не открыт файл&quot; &lt;&lt; FNAME;
    _getch();
    return 1;
}

system(&quot;cls&quot;);
cout &lt;&lt; &quot;\n=============================================== ДОБАВЛЕНИЕ ДАННЫХ В ФАЙЛ ===============================================\n\n\n&quot;;
cout &lt;&lt; &quot; Введите число Аукционов: &quot; &lt;&lt; endl;
cin &gt;&gt; nst;
for (int j = 0; j &lt; nst; j++)
{
    cin.ignore();
    cout &lt;&lt; &quot; Введите название аукциона   \n &quot;;
    cin.getline(stud[j].Naz, 35);
    cin.ignore();
    cout &lt;&lt; &quot; Введите место проведения : \n &quot;;
    cin.getline(stud[j].AdresProved, 35);
    cin.ignore();
    cout &lt;&lt; &quot; Введите дату проведения : \n &quot;;
    cin.getline(stud[j].DataProved, 11);
    cin.ignore();
    cout &lt;&lt; &quot; Введите время проведения :  \n &quot;;
    cin.getline(stud[j].VremyProved, 11);
    cin.ignore();


    cin.ignore();
    cout &lt;&lt; &quot; Номер лота   \n &quot;;
    cin &gt;&gt; stud[j].NomLot;
    cin.ignore();
    cout &lt;&lt; &quot; ФИО продовца : \n &quot;;
    cin.getline(stud[j].FioPr, 35);
    cin.ignore();
    cout &lt;&lt; &quot; Номер и серия паспорта через пробел : \n &quot;;
    cin.getline(stud[j].Pas1, 35);
    cin.ignore();
    cout &lt;&lt; &quot; Адрес :  \n &quot;;
    cin.getline(stud[j].AdresProdavca, 35);
    cin.ignore();
    cout &lt;&lt; &quot; Номер телефон   \n &quot;;
    cin &gt;&gt; stud[j].NomerTePr;
    cin.ignore();
    cout &lt;&lt; &quot; Стартовая цена : \n &quot;;
    cin &gt;&gt; stud[j].StarCena;
    cin.ignore();
    cout &lt;&lt; &quot; Фактическая цена : \n &quot;;
    cin &gt;&gt; stud[j].FactCena;
    cin.ignore();
    cout &lt;&lt; &quot; Описание лота :  \n &quot;;
    cin.getline(stud[j].Opisanie, 255);
    cin.ignore();


    cin.ignore();
    cout &lt;&lt; &quot; ФИО покупателя : \n &quot;;
    cin.getline(stud[j].FioPo, 35);
    cin.ignore();
    cout &lt;&lt; &quot; Номер и серия паспорта через пробел : \n &quot;;
    cin.getline(stud[j].Pas2, 35);
    cin.ignore();
    cout &lt;&lt; &quot; Адрес :  \n &quot;;
    cin.getline(stud[j].AdresPokupately, 35);;
    cin.ignore();
    cout &lt;&lt; &quot; Номер телефон   \n &quot;;
    cin &gt;&gt; stud[j].NomerTePo;
    cin.ignore();
    outFil &lt;&lt; stud[j].Naz &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].DataProved &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].VremyProved &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].AdresProved &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].NomLot &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].FioPr &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].Pas1 &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].AdresProdavca &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].NomerTePr &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].StarCena &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].FactCena &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].Opisanie &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].FioPo &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].Pas2 &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].AdresPokupately &lt;&lt; &quot; &quot;
        &lt;&lt; stud[j].NomerTePo &lt;&lt; &quot; \n&quot;;

}
outFil.close();

}

/////////////////////////////////////////////////////////////////////////////

int resc() { setlocale(LC_CTYPE, "rus"); string textline; char matr[ROW][COL]; int count = -1;

// Имя открываемого файла, задано в директиве #define
ifstream inFile(FNAME);
if (!inFile)
{
    cout &lt;&lt; &quot;Не открыт файл&quot; &lt;&lt; FNAME;
    _getch();
    return 1;
}

system(&quot;cls&quot;);
cout &lt;&lt; &quot;\nСодержимое файла с данными\n&quot;;
while (getline(inFile, textline))
{

    count++;
    strcpy(matr[count], textline.c_str());
    cout &lt;&lt; &quot;\n&quot; &lt;&lt; matr[count];
    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;

}

}

/////////////////////////////////////////////////////////////////////////////

int poisk() // === ПОИСК ДАННЫЕ ИЗ ТЕКСТОВОГО ФАЙЛА ПО КРИТИЮ === { system("color 71"); setlocale(LC_CTYPE, "RUS"); string textline; string needle; bool founded = false;

// ВЫВОД СОДЕРЖИМОГО ФАЙЛА НА ЭКРАН ПО КРИТЕРИЮ &amp; ЧТЕНИЕ ФАЙЛА В МАТРИЦУ

system(&quot;cls&quot;);
ifstream inFile(FNAME);
cout &lt;&lt; &quot;\n======================================================== ПОИСК =========================================================\n\n\n&quot;;
cout &lt;&lt; &quot;                                 ---------------------------------------------------------\n&quot;;
cout &lt;&lt; &quot;                                 | Здесь осуществляется поиск Аукциона по критериям.     |\n&quot;;
cout &lt;&lt; &quot;                                 | Для этого необходимо вписать критерий и нажать Enter. |\n&quot;;
cout &lt;&lt; &quot;                                 ---------------------------------------------------------\n\n\n&quot;;
cout &lt;&lt; &quot;Введите критерий: \n&quot; &lt;&lt; endl;
cin &gt;&gt; needle;
cout &lt;&lt; &quot;\n&quot;;

while (getline(inFile, textline))
{
    if (textline.find(needle) != string::npos)
    {
        cout &lt;&lt; textline &lt;&lt; &quot;\n&quot; &lt;&lt; endl;
        founded = true;
    }
}

if (!founded)
{
    cout &lt;&lt; &quot;Данных по критерию не найдено!&quot; &lt;&lt; endl;
}
_getch();
return 0;

}

/////////////////////////////////////////////////////////////////////////////

int delet() { setlocale(LC_CTYPE, "RUS"); system("color 71"); system("cls"); ofstream inFile(FNAME, ios::out | ios::trunc); cout << "\n================================================= УДАЛЕНИЕ ИНФОРМАЦИИ ==================================================\n\n\n"; cout << " -------------------------------\n"; cout << " | ДАННЫЕ БЫЛИ УСПЕШНО УДАЛЕНЫ |\n"; cout << " -------------------------------\n\n\n"; cout << "\n" << endl; _getch(); return 0; }

/////////////////////////////////////////////////////////////////////////////

  • @Harry, ну не дубликат это, если по честному. Тут проблема поглубже – KoVadim Apr 11 '21 at 15:47
  • Не сортируется, на выводе нет отсортированой информации. – Артём Титенко Apr 12 '21 at 08:26
  • функция просмотра печатает содержимое файла. Ей побоку на других. Поэтому, если открыть существующий файл, отсортировать и снова показать файл, то естественно, ничего не поменяется. Нужно сделать нормальную загрузку файла в память. Как то так. – KoVadim Apr 12 '21 at 08:43
  • я полтора часа назад сделал так и всё заработало, спасибо что ответил на комментарий. – Артём Титенко Apr 12 '21 at 10:14
  • Спасибо за помощь, я всё сделал. – Артём Титенко Apr 13 '21 at 01:15

1 Answers1

0

Когда в далекие далекие времена в одной далекой галактике в языке древних си, этот код наверно как то мог работать. Но сейчас, нужно писать сигнатуру функции полностью при ее предварительной объявлении (forward declaration). А у Вас разные

int Sort();

void Sort(TAukcion** q, const int n) {..}

При чем, сильно разные.

И при вызове передавайте правильно - у Вас ведь указатель на указатель, а передаете тип

case 5: {Sort(TAukcion, nst); break; }

Исправляем где то так

сигнатуру на такую

void Sort(TAukcion* q, const int n)

и вызов где то так

case 5: {Sort(stud, nst); break; }

ну и в самой функции сортировки поправить пару стрелок на точки.

Но потом я посмотрел вокруг и понял, что книги по си не нужно читать, что бы писать на плюсах. К примеру, не нужно использовать вот такую конструкцию

typedef struct {....} TAukcion;

можно просто

struct TAukcion {....};

Вывод - учите нормальный с++, а не вот такую дикую смесь древного си и непонятно чего.

KoVadim
  • 112,121
  • 6
  • 94
  • 160