Что происходит, когда две функции с одинаковой подписью находятся в одном и том же пространстве имен? - PullRequest
0 голосов
/ 26 февраля 2020

Насколько я понимаю, я могу использовать пространства имен, чтобы избежать переопределения функций друг над другом. Но что, если пространства имен имеют одинаковые имена?

Я включил оба файла .h ниже, названный VideoLibrary :: check (), и он компилируется. Почему? Не противоречит ли это цели пространства имен?

file1.h и file2.h:

namespace VideoLibrary
{
  void check();
}

file1. cpp:

namespace VideoLibrary
{
  void check()
    {
        printf("check1");
    }
}

file2. cpp:

namespace VideoLibrary
{
  void check()
    {
        printf("check2");
    }
}

Меня больше всего беспокоит то, что мой проект включает внешние библиотеки, и я волнуюсь, что он включает функции с такой же сигнатурой, что и в моем проекте. Как я могу получить ошибку для такого случая во время компиляции? Я использую Xcode в качестве редактора, если это имеет значение.

1 Ответ

0 голосов
/ 26 февраля 2020

Если у вас есть 2 (не встроенных) определения одной и той же функции в разных единицах перевода, у вас есть ODR (одно правило определения) с нарушением NDR (без диагностики c требуется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...