Ошибка средств компоновщика LNK2019 VS 2022

Столкнулся с ошибкой средств компоновщика. Текст ошибки ссылается на CreateFile() в main.cc и вызов CreateFile() в Task5() practice5.cc (возможно я не правильно что-то понял, поэтому текст ошибки будет ниже). Предполагаю ошибка из-за подводных камней анонимного пространства имен.
main.h

#ifndef MAIN_H_
#define MAIN_H_
#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

const int kIncorrectUserData = INT_MIN;

namespace main_functions {
string CreateFile();
double DoubleInput();
int IntegerInput();
}  // namespace main_functions
#endif  // MAIN_H_

main.cc

#include "main.h"

#include "marbles.h"
#include "practice4.h"
#include "practice5.h"

namespace main_functions {
string CreateFile() {
  cout << "What do you want to name the text file?\n";
  string filename, file_content;
  cin >> filename;
  ofstream file(filename + ".txt");
  if (file.is_open()) {
    cout << "What do you want to enter in file? Enter 'break!' separate line "
            "for ending\n";
    cin >> file_content;
    while (file_content != "break!") {
      file << file_content << "\r\n";
      cin >> file_content;
    }
    file.close();
  } else {
    cout << "Program cannot open this txt file\n";
  }
  return filename + ".txt";
}

double DoubleInput() {
  // ...
}

int IntegerInput() {
  // ...
}
}  // namespace main_functions

int main() {
  // ...
}

practice5.h

#ifndef PRACTICE5_PRACTICE5_H_
#define PRACTICE5_PRACTICE5_H_
#include <cmath>
#include <fstream>
#include <limits>

#include "main.h"

namespace practice5 {
void Practice5Run();
}
#endif  // PRACTICE5_PRACTICE5_H_

practice5.cc

#include "practice5.h"

namespace inner {
void swap(int* a, int* b) {
  // ...
}
}  // namespace inner

namespace {
int EuclideanAlgorithmByDivision(int first_number, int second_number) {
  // ...
}

int EuclideanAlgorithmBySubtraction(int first_number, int second_number) {
  // ...
}

void Task1() {
  // ...
}

int* EratosthenesSieve(int i, int consistency_integers_size,
                       int* consistency_integers) {
  // ...
}

void Task2() {
  // ...
}

void Task3() {
  // ...

void Task4() {
  // ...
}

// AI automaticly-generated functions

int partition(int arr[], int low, int high) {
  // ...
}

void quickSort(int arr[], int low, int high) {
  // ...
}
// Ending AI auto-generated functions

void DrawingTableInFile(ofstream& fout, string** array, const int kRowsCount,
                        const int kColumnsCount) {
  // ...
}

void ReverseArray(int arr[], int starting_element, int ending_element) {
  // ...
}

void Task5() {
  cout << "Enter task number: '9' or '23'\n";
  int task_number;
  task_number = main_functions::IntegerInput();
  switch (task_number) {
    case 9: {
      const int kFilesCount = 2;
      ofstream fin("C.txt");
      for (int file_number = 0; file_number < kFilesCount; file_number++) {
        ifstream fout(main_functions::CreateFile());
        if (fout.is_open() and fin.is_open()) {
          const int kArraySize = 1000;
          int* array = new int[kArraySize];
          array[0] = kArraySize;
          InitializingArray(fout, array, 1);
          quickSort(array, 1, array[0] - 1);
          for (int i = 1; i < array[0]; i++) fin << to_string(array[i]) << " ";
          delete[] array;
          fout.close();
        } else {
          cout << "Program cannot open this txt files\n";
          break;
        }
      }
      fin.close();
      ifstream fout("C.txt");
      if (fout.is_open()) {
        string file_content;
        while (getline(fout, file_content)) cout << file_content;
        fout.close();
        fstream clear_file("C.txt", ios::out);
        clear_file.close();
      } else {
        cout << "Program cannot open this txt file\n";
      }
    } break;
    case 23: {
     // ...
    } break;
    default:
      cout << "Incorrect task number\n";
  }
}
}  // namespace
namespace practice5 {
void Practice5Run() {
  int command = 1;
  while (command != 0) {
    cout << "Enter task number separate digit or '0' for exit\n";
    command = main_functions::IntegerInput();
    if (command == 1)
      Task1();
    else if (command == 2)
      Task2();
    else if (command == 3)
      Task3();
    else if (command == 4)
      Task4();
    else if (command == 5)
      Task5();
    else if (command == 0)
      break;
    else
      cout << "Wrong command.\n";
  }
}
}  // namespace practice5

Процесс сборки:

1>main.cc
1>marbles.cc
1>practice4.cc
1>C:\Users\mag1s\source\repos\MIREA\Procedural programming\practice4.cc(153,54): warning C4244: аргумент: преобразование "double" в "const unsigned __int64", возможна потеря данных
1>C:\Users\mag1s\source\repos\MIREA\Procedural programming\practice4.cc(373,31): warning C4002: слишком много аргументов для вызова макроса, подобного функции, "max"
1>C:\Users\mag1s\source\repos\MIREA\Procedural programming\practice4.cc(375,40): warning C4002: слишком много аргументов для вызова макроса, подобного функции, "min"
1>C:\Users\mag1s\source\repos\MIREA\Procedural programming\practice4.cc(377,44): warning C4002: слишком много аргументов для вызова макроса, подобного функции, "max"
1>C:\Users\mag1s\source\repos\MIREA\Procedural programming\practice4.cc(379,44): warning C4002: слишком много аргументов для вызова макроса, подобного функции, "min"
1>C:\Users\mag1s\source\repos\MIREA\Procedural programming\practice4.cc(389,14): warning C4267: инициализация: преобразование из "size_t" в "int"; возможна потеря данных
1>C:\Users\mag1s\source\repos\MIREA\Procedural programming\practice4.cc(390,59): warning C4244: +=: преобразование "double" в "int", возможна потеря данных
1>practice5.cc
1>practice6.cc
1>Создание кода...
1>C:\Users\mag1s\source\repos\MIREA\Procedural programming\practice4.cc(357): warning C4715: `anonymous namespace'::GetVendor: значение возвращается не при всех путях выполнения
1>practice5.obj : error LNK2019: ссылка на неразрешенный внешний символ "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl main_functions::CreateFile(void)" (?CreateFile@main_functions@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) в функции "void __cdecl `anonymous namespace'::Task3(void)" (?Task3@?A0x850a01fe@@YAXXZ).
1>C:\Users\mag1s\Source\Repos\MIREA\x64\Debug\Procedural programming.exe : fatal error LNK1120: неразрешенных внешних элементов: 1
1>Сборка проекта "Procedural programming.vcxproj" завершена с ошибкой.

UPD: Ссылка на неразрешенный внешний символ (возможные причины) Не дает мне ответа на вопрос, т.к. в коде не используются сторонние библиотеки, у CreateFile() есть объявление, файлы с кодом комплилруются, в нем нет классов и присутствует внешнее связывание.


Ответы (0 шт):