Задать вопрос
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
  • Вопрос задан
  • 268 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 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 не привычно...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы