Вам необходимо реализовать свои функции в том же пространстве имен, что и объявленное:
[файл "namespace_func.cpp"]
#include "namespace_func.h"
#include <iostream>
void global_function( )
{
std::cout << "global_function" << std::endl;
}
namespace vm
{
void my_namespace_function( )
{
std::cout << "my_namespace_function" << std::endl;
}
void some_class::my_class_function( )
{
std::cout << "some_class::my_class_function" << std::endl;
}
};
[файл "namespace_func.h"]
#ifndef _NAMESPACE_FUNC_H
#define _NAMESPACE_FUNC_H
void global_function( );
namespace vm
{
void my_namespace_function( );
class some_class
{
public:
static void my_class_function( );
};
};
#endif // _NAMESPACE_FUNC_H
Затем вы можете создать ссылку на ваш "namespace_main.cpp":
#include "namespace_func.h"
using namespace vm;
int main ( )
{
global_function( ); // this is fine
some_class::my_class_function( ); // this is fine
my_namespace_function( ); // Fine. NO "undefined reference to vm::my_classless_function()"
return 0;
}
Командная строка:
g++ -Wall namespace_main.cpp namespace_func.cpp -o namespace
Вывод:
$ ./namespace
global_function
some_class::my_class_function
my_namespace_function
- примечание: вам не нужно объявлять свои функции для получения "(void)" как в "C".Просто оставьте это пустым.