В процессе отделения набора функций, связанных с вводом и выводом, от других частей программы, я столкнулся с проблемой компиляции файлов, когда функции в заголовке помещаются в пространство имен.Компилируются следующие файлы:
main.cpp
#include "IO.h"
int main()
{
testFunction("yikes");
}
IO.h
#ifndef IO_H_INCLUDED
#define IO_H_INCLUDED
#include <string>
void testFunction(const std::string &text);
#endif
Однако, когда testFunction
помещается в пространство имен:
#ifndef IO_H_INCLUDED
#define IO_H_INCLUDED
#include <string>
// IO.h
namespace IO
{
void testFunction(const std::string &text);
}
#endif
в IO.h, а затем вызывается как IO::testFunction
, сборка не удалась, выбросить
undefined reference to `IO::testFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2.exe: error: ld returned 1 exit status`
В каждом случае IO.cpp равен
#include <string>
#include <iostream>
void testFunction(const std::string &text)
{
std::cout << text << std::endl;
}
, а команда компиляции - g++ -std=c++11 main.cpp IO.cpp
, с компилятором x86_64-w64-mingw32 из TDM-GCC, наWindows 10 Home.