ссылаясь на что-то из глобального пространства имен? - PullRequest
4 голосов
/ 29 июня 2011

Это действительно тривиально, но я получаю ошибку, которую не ожидал.

У меня есть код, который находится внутри пространства имен

ниже приведен псевдокод, представляющий структуру моего кода:

namespace A {
    void init() {
        initialize_kitchen_sink();
    }
    #include "operations.h" // declares shake_and_bake()
    void foo() {            
        shake_and_bake();
    }
    void cleanup() {
        // do nothin' cuz i'm a slob
    }
}

ошибка:

undefined reference to `A::shake_and_bake`

Ответы [ 2 ]

7 голосов
/ 29 июня 2011

Оказывается, перемещение #include за пределы пространства имен исправит это.

Как бы то ни было, включение будет фактически объявлять все функции в operations.h внутри пространства имен A. Тогда он будет тщетно искать реализации.

Я полагаю, что вместо удаления всего моего поста, я могу также оставить его на минуту, чтобы кто-то еще мог наткнуться на подобную проблему и быть просвещенным.

6 голосов
/ 29 июня 2011

Чтобы точно ответить на ваш вопрос, вы можете ссылаться на что-то из глобального пространства имен, используя :: в качестве первого утверждения, как в:

 void foo() {            
        ::shake_and_bake();
    }

Конечно, ваш ответ для этого особого случая правильный.

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