я собираюсь предположить, что вы получили ошибка неразрешенной связи при попытке вызвать foo
из основного в примере, который вы опубликовали. Есть пара вопросов в игре здесь, начиная с верхней:
- file.h объявляет
foo
существующие в пространстве имен first::second
.
- file.c приводит пространство имен
first::second
в поиск файлов, но он не влияет на определения функций. Таким образом, реализация void foo() {}
на самом деле является функцией, определяемой в глобальном масштабе - не в first::second
, как вы могли ожидать.
- main.c приносит пространство имен
first::second
в свой файл. Компилятор рассмотрит first::second
, а также глобальную область ::
, когда вы вызываете foo в main. Компилятор выбирает first::second::foo
, так как file.h
не объявляет глобальный foo()
.
- вы получаете ошибку привязки для неразрешенного символа, потому что
first::second::foo
так и не был реализован.
В дополнение к предложению Джея, другие исправления вы можете сделать это в полной мере квалифицировать определение Foo похоже на функции-члены:
// file.c
#include "file.h"
void first::second::foo()
{
// ...
}
Какой компилятор у вас есть? (Возможно, вы захотите использовать .h (pp) /. Cpp как расширение для исходных файлов) –
А как включить директивы? –
Вы хотите добавить сообщение об ошибке на свой вопрос? (Пожалуйста, не добавляйте его в качестве комментария!) – greatwolf