Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Две ошибки error LNK2019 и fatal error LNK1120 во время компоновки / 4 сообщений из 4, страница 1 из 1
14.09.2019, 13:58
    #39861903
Oleg_Lin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две ошибки error LNK2019 и fatal error LNK1120 во время компоновки
Привет всем, при написании кода столкнулся с ошибками времени компоновки:
1>Source.obj : error LNK2019: unresolved external symbol "int __cdecl callsWord_inference(int,int)" (?callsWord_inference@@YAHHH@Z) referenced in function "int __cdecl menu(int)" (?menu@@YAHH@Z)
и
1>F:\Project\English_Random_2.0\x64\Debug\English_Random_2.0.exe : fatal error LNK1120: 1 unresolved externals
Из-за чего возникают примерно нашёл но исправить не смог. /SUBSYSTEM:CONSOLE стоит в настройках.
Программа ещё не готова и из-за ошибок и запутанности слил все файлы в один файл чтобы исправить ошибки, но осталась ошибки компоновки. Потом назад разобью на файлы и продолжу развивать её после решения этих проблем.
Тапками сильно но бросайте, т.к я не опытен ещё в c++ и ещё учусь.


Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <vector>

using namespace std;
void pause();
int callsWord_inference(int d, int a);
int menu(int d);

class word_bases
{
private:
	vector<string> rus;
	int q;
	vector<string> eng;
	int w;

public:
	word_bases()
	{
		ifstream lan("Russian.txt");
		for (q = 0; lan && lan >> rus[q]; q++)
			;
		lan.close();
		ifstream lan2("English.txt");
		for (w = 0; lan2 && lan2 >> eng[w]; w++)
			;
		lan2.close();
	}

	int word_inference(int a)
	{
		if (a == 1)
		{
			cout << "***Начинаем, russian!\n";
			cout << "\n";
			cout << "\n";

			int z{};
			for (; z == q; z++)
			{
				cout << rus[z] << endl;
				pause();
			}
			menu(1);

		}
		else if (a == 2)
		{
			cout << "***Начинаем, english!\n";
			cout << "\n";
			cout << "\n";

			int x{};
			for (; x == w; x++)
			{
				cout << eng[x] << endl;
				pause();
			}

			menu(1);
		}
		else if (a == 3)
		{
			cout << "***Выключаю. \n";
			exit(1);
		}
		else if (a != 1 && 2 && 3)
		{
			cout << "***Вы ввели не то число, попробуйте заново! \n";
			menu(1);
		}
		return 0;
	}

	//Чтобы программа не закрывалась.
	int callsWord_inference(int d, int a)
	{
		switch (d)
		{
		case 1:
			word_inference(a);
			return 0;
			break;
		default:
			return a;
		}
	}
	friend void pause();
	friend int menu(int d);
};

//Меню выбора и обработка некорректного пользовательского ввода.
int menu(int d)
{

	while (true)
	{
		cout << "***Какую сторону вы хотите учить? \n" << "***Для russian нажмите 1, для english 2, ";
		cout << "для выхода нажмите 3.\n";
		int a;
		cin >> a;

		if (cin.fail())
		{
			cout << "***Вы ввели непонятный символ, попробуйте заново! \n";
			cin.clear();
			cin.ignore(32767, '\n');
		}
		else
			return callsWord_inference(d, a);
	}
}

//Пауза после вывода на экран слова (продолжить, вернутся в меню и обработка некорректного пользовательского кода).
void pause()
{
	int b(0);
	while (b != 1)
	{
		int a(0);
		cout << "***P.s: для выхода нажмите 3, для продолжения любую другую цифру, потом enter.\n";
		cout << "\n";
		cin >> a;
		if (cin.fail())
		{
			cout << "***Вы ввели не цифру!, попробуйте заново! \n";
			cin.clear();
			cin.ignore(32767, '\n');
			b = 0;
		}
		else if (a == 3)
		{
			cout << "***Возвращаемся к меню.\n";
			menu(1);
			b = 1;
		}
		else if (a >= 0 && a <= 10)
			b = 1;
		else if (a > 10)
		{
			cout << "Введённое чесло больше 10! Оно не подходит! \n";
			b = 0;
		}
		else if (a < 0)
		{
			cout << "Введённое чесло меньше 0! Оно не подходит! \n";
			b = 0;
		}
	}
}

//Запуск и русифицирование программы.
int main()
{
	setlocale(LC_CTYPE, "rus");
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	word_bases lang;
	lang.word_inference(menu(0));
	return 0;
}
...
Рейтинг: 0 / 0
14.09.2019, 15:27
    #39861923
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две ошибки error LNK2019 и fatal error LNK1120 во время компоновки
Зачем friend'ить внешние функции (menu/pause) в классе word_bases, ведь функции-члены, к которым они обращаются все равно public?

Что мешает передать в menu экземпляр класса word_bases по ссылке и дернуть изнутри?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
int menu(int d, word_bases& wb)
{

	while (true)
	{
		cout << "***Какую сторону вы хотите учить? \n" << "***Для russian нажмите 1, для english 2, ";
		cout << "для выхода нажмите 3.\n";
		int a;
		cin >> a;

		if (cin.fail())
		{
			cout << "***Вы ввели непонятный символ, попробуйте заново! \n";
			cin.clear();
			cin.ignore(32767, '\n');
		}
		else
			return wb.callsWord_inference(d, a);
	}
}


friend'овость из класса удалить, но сначала добавить forward declaration для класса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
using namespace std;

class word_bases;

void pause();
int callsWord_inference(int d, int a);
int menu(int d, word_bases& wb);


в word_inference нужно исправить вызов menu тоже:
Код: plaintext
1.
menu(1, *this);



Короче, тут налицо архитектурный Адъ и Израиль
...
Рейтинг: 0 / 0
15.09.2019, 06:40
    #39861977
Oleg_Lin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две ошибки error LNK2019 и fatal error LNK1120 во время компоновки
Cerebrum, Спасибо, теперь знаю какие темы мне нужно особенно повторить и изучить, и понял то, что сначала лучшую выучить теорию, прежде чем продолжить кодить.

"Зачем friend'ить внешние функции (menu/pause) в классе word_bases, ведь функции-члены, к которым они обращаются все равно public?" - не подумал.

"Что мешает передать в menu экземпляр класса word_bases по ссылке и дернуть изнутри?" - вылетели из головы.

А про указатель *this краем глаза читал и мало.

Одним словом незнание теории и отсутствие опыта.
...
Рейтинг: 0 / 0
15.09.2019, 11:44
    #39861992
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две ошибки error LNK2019 и fatal error LNK1120 во время компоновки
Oleg_LinПривет всем, при написании кода столкнулся с ошибками времени компоновки:
1>Source.obj : error LNK2019: unresolved external symbol "int __cdecl callsWord_inference(int,int)" (?callsWord_inference@@YAHHH@Z) referenced in function "int __cdecl menu(int)" (?menu@@YAHH@Z)
и
1>F:\Project\English_Random_2.0\x64\Debug\English_Random_2.0.exe : fatal error LNK1120: 1 unresolved externalsнет тела функции callsWord_inference(), вот линкер и ругается
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Две ошибки error LNK2019 и fatal error LNK1120 во время компоновки / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]