Trame2771
@Trame2771

Как использовать namespace в header?

solution.cpp

#include <iostream>
#include <vector>
#include <string>

#include "input.h"

int main()
{
	setlocale(0, "");

	input::do_input();
	const uint8_t m = input::m, n = input::n;

	return 0;
}

input.h

namespace input
{
	void do_input();
	extern uint8_t m;
	extern uint8_t n;
	extern std::vector<std::vector<bool>> field;
}

input.cpp

#include <iostream>
#include <vector>
#include <string>

using std::cout, std::cin;
using std::string, std::vector;

string buf;
uint8_t real_m, real_n;
uint8_t m, n;
vector<vector<bool>> field(m, vector<bool>(n));

void read_unuseful_line()
{
	for (uint8_t i = 0; i < n; i++)
	{
		cin >> buf;
	}
}

void do_input()
{
	cin >> buf;
	real_m = stoi(buf);
	m = real_m - 2;

	cin >> buf;
	real_n = stoi(buf);
	n = real_n - 2;

	read_unuseful_line();
	for (uint8_t i = 0; i < m; i++)
	{
		cin >> buf;
		for (uint8_t j = 0; j < n; j++)
		{
			cin >> buf;
			field[i][j] = stoi(buf);
		}
		cin >> buf;
	}
	read_unuseful_line();


	for (auto row : field)
	{
		for (auto col : row)
		{
			cout << col << ' ';
		}
		cout << '\n';
	}
}

Компиляция
c++ solution.cpp input.cpp -static
Сообщение ошибке
undefined reference to `input::do_input()
undefined reference to `input::m'
undefined reference to `input::n'
collect2.exe: error: ld returned 1 exit status
  • Вопрос задан
  • 194 просмотра
Решения вопроса 2
@res2001
Developer, ex-admin
Заверните весь код в input.cpp в namespace input {}
namespace добавляет к символам в объектом файле имя namespace, но т.к. у вас определения в input.cpp не включены в namespace, то в объектном файле эти символа будут без добавления имени namespace, поэтому и undefined reference.
Ответ написан
Комментировать
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Ну все правильно - объявления функций вы положили в неймспейс, а тела - нет
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Trame2771
@Trame2771 Автор вопроса
Сорян, я просто не понимал, что тут #include просто вставляет текст из файла. Это куда проще, просто после java не привычно...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы