Исправь ошибки в коде
error C2512: PDFParser: нет подходящего конструктора по умолчанию
error C2039: "ParsePDF": не является членом "PDFParser".
error C2065: LanguageDetector: необъявленный идентификатор
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "detector"



#include <iostream>
#include <string>
#include <map>
#include <vector>
#include "pdf_parser.h" // библиотека для парсинга PDF
#include "langdetect.h" // библиотека для определения языка

class CodeAI
{
public:
	std::string ParsePDF(const std::string& pdf_path) {
		PDFParser parser; // Создание объекта парсера
		std::string text = parser.ParsePDF(pdf_path); // Использование метода парсера для получения текста из PDF
		return text;
	}

	std::string DetectLanguage(const std::string& text) {
		LanguageDetector detector; // Создание объекта детектора языка
		std::string lang = detector.DetectLanguage(text); // Использование метода детектора для определения языка
		return lang;
	}

	void LearnFromPDF(const std::string& pdf_path) {
		std::string text = ParsePDF(pdf_path);
		std::string lang = DetectLanguage(text);

		if (lang == "ru") {
			LearnFromText(text, "ru");
		}
		else if (lang == "eu") {
			LearnFromText(text, "eu");
		}
	}

	void LearnFromText(const std::string& text, const std::string& lang) {
		// Фильтрация знаний из текста и запоминание
		filtered_texts[lang].push_back(text);
	}

	std::string GenerateCode(const std::string& query) {
		// Генерация кода на основе запроса и изученных знаний
		return "Generated code based on query: " + query;
	}

	std::string Answer(const std::string& question) {
		// Обработка вопроса и генерация ответа
		return "Answer to the question";
	}

	void Interface() {
		std::string cmd;
		std::cout << "Enter a command : \n";
		std::cin >> cmd;

		if (cmd == "learn_pdf") {
			std::string pdf_path;
			std::cout << "Enter the PDF path : \n";
			std::cin.ignore();
			std::getline(std::cin, pdf_path);
			LearnFromPDF(pdf_path);
		}
		else if (cmd == "generate") {
			std::cout << "Enter a request : \n";
			std::string query;
			std::cin.ignore();
			std::getline(std::cin, query);
			std::cout << GenerateCode(query) << "\n";
		}
		else if (cmd == "knowledge") {
			std::cout << "Enter the language(ru / eu) :\n";
			std::string lang;
			std::cin >> lang;

			if (filtered_texts.count(lang) > 0) {
				std::cout << "Acquired knowledge : \n";

				for (const auto& text : filtered_texts[lang]) {
					std::cout << text << "\n";
				}
			}
			else {
				std::cout << "There is no acquired knowledge for the selected language.\n";
			}

		}
		else if (cmd == "finish") {
			std::cout << "Finished learning from PDFs.Opening communication window.\n";
			CommunicationWindow();
		}
		else {
			std::cout << "Invalid command.\n";
		}

		Interface();
	}

	void CommunicationWindow() {
		std::cout << "Enter a question or type ‘exit’ to close the communication window : \n";
		std::string question;
		std::cin.ignore();
		std::getline(std::cin, question);

		if (question == "exit") {
			std::cout << "Closing communication window.\n";
			return;
		}

		std::string answer = Answer(question);
		std::cout << "Answer: " << answer << "\n";

		CommunicationWindow();
	}

private:
	std::map<std::string, std::vector<std::string>> filtered_texts;
};

int main() {
	CodeAI ai;
	ai.Interface();
	return 0;
}