T
T
trubanenkoalex2020-06-05 13:51:13
C++ / C#
trubanenkoalex, 2020-06-05 13:51:13

C linking error, how to link?

When compiling the file, linking errors occur. LINK2001

Header.h error

#pragma once
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#include <Windows.h>
#define LC_ALL 0
#pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS
#define Enter_a_word _asm\

/* Структура для хранения информации про одну страну */

typedef struct tagITEM
{
    char Country[20], City[20];
    int Population;
} ITEM;
/* Массив максимум на 200 стран */
extern ITEM Men[200];

 extern int Number;
/* Функция для вывода всех элеиентов */
void Print(void);
void Add(void);
void Del(void);
void Save(void);
void Load(void);
void Sort(void);
int Menu(void);

header.cpp
#include "Header.h"
void Print(void)
{
    int i;

    printf(" N  Страна              Столица                  Население\n");
    for (i = 0; i < Number; i++)
        printf("%2i. %-20s %-20s %3i\n", i + 1, Men[i].Country,
            Men[i].City, Men[i].Population);
} /* End of 'Print' function */

/* Функция для добавления элемента */
void Add(void)
{
    if (Number == 200)
    {
        fprintf(stderr, "Невозможно добавить еще один элемент\n");
        return;
    }

    printf("Введите название страны > ");
    scanf("%s", Men[Number].Country);
    printf("Введите название столицы > ");
    scanf("%s", Men[Number].City);
    printf("Введите кол-во населения > ");
    scanf("%i", &Men[Number].Population);

    Number++;
} /* End of 'Add' function */

/* Функция для удаления элемента */
void Del(void)
{
    int i;

    Print();
    printf("Введите номер удаляемого элемента > ");
    scanf("%i", &i);
    if (i < 1 || i > Number)
    {
        fprintf(stderr, "Элемент с номером %i не существует\n", i);
        return;
    }

    for (i--; i < Number - 1; i++)
        Men[i] = Men[i + 1];

    Number--;
} /* End of 'Del' function */

/* Функция для сохранения массива в файле */
void Save(void)
{
    FILE* F;
    int i;

    if ((F = fopen("country.txt", "wt")) == NULL)
    {
        fprintf(stderr, "Невозможно открыть для записи файл 'country.txt'\n");
        return;
    }

    fprintf(F, "%i\n", Number);
    for (i = 0; i < Number; i++)
        fprintf(F, "%s\n%s\n%i\n", Men[i].Country, Men[i].City, Men[i].Population);

    fclose(F);
} /* End of 'Save' function */

/* Функция для чтения массива из файла */
void Load(void)
{
    FILE* F;
    int i;

    if ((F = fopen("country.txt", "rt")) == NULL)
    {
        fprintf(stderr, "Невозможно открыть для чтения файл 'country.txt'\n");
        return;
    }

    fscanf(F, "%i", &Number);
    for (i = 0; i < Number; i++)
        fscanf(F, "%s%s%i", Men[i].Country, Men[i].City, &Men[i].Population);

    fclose(F);
} /* End of 'Load' function */

/* Функция для упорядочивания массива по названию страны */
void Sort(void)
{
    int i, j;
    ITEM Temp;

    for (j = Number - 1; j > 0; j--)
        for (i = 0; i < j; i++)
            if (strcmp(Men[i].Country, Men[i + 1].Country) > 0)
            {
                Temp = Men[i];
                Men[i] = Men[i + 1];
                Men[i + 1] = Temp;
            }
} /* End of 'Sort' function */

/* Вывод меню и чтение номера выбранного пункта */
int Menu(void)
{
    int c = 0;

    while ((c < '0' || c > '6') && c != 27)
    {
        printf("|-->0 : выход\n"
            "|-->1 : добавить\n"
            "|-->2 : сохранить\n"
            "|-->3 : загрузить\n"
            "|-->4 : вывести\n"
            "|-->5 : упорядочить\n"
            "|-->6 : удалить\n"
            ">");
        c = getch();
        printf("%c\n", c);
    }
    system("cls");
    return c;
} /* End of 'Menu' function */

source.cpp
#include "Header.h"
void main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(0, "Rus");

    int Selection;

    while ((Selection = Menu()) != '0' && Selection != 27)
        switch (Selection)
        {
        case '1':
            _asm call Add
            break;
        case '2':
            _asm call Save
            break;
        case '3':
            _asm call Load
            break;
        case '4':

            _asm call Print

            break;
        case '5':

            _asm call Sort

            break;
        case '6':
            _asm call Del
            break;
        }
}

Answer the question

In order to leave comments, you need to log in

3 answer(s)
T
trubanenkoalex, 2020-06-07
@trubanenkoalex

Write static variables in files

V
Vladimir Korotenko, 2020-06-05
@firedragon

See what it means, somewhere you seem to have lost a file.


extern ITEM Men[200];
extern intNumber;

#pragma once
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#include <Windows.h>
#define LC_ALL 0
#pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS
#define Enter_a_word _asm\

/* И не забываем про манглинг, вам в общем то не нужны C++ функции в чисто сишном коде*/
#ifdef __cplusplus
extern "C" {
#endif
/* Структура для хранения информации про одну страну */

typedef struct tagITEM
{
    char Country[20], City[20];
    int Population;
} ITEM;
/* Массив максимум на 200 стран */
extern ITEM Men[200];

 extern int Number;
 
/* Функция для вывода всех элеиентов */
void Print(void);
void Add(void);
void Del(void);
void Save(void);
void Load(void);
void Sort(void);
int Menu(void);

#ifdef __cplusplus
}
#endif

E
Evgeny Petryaev, 2020-06-05
@Gremlin92

remove extern C and everything related to it

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question