Переслать декларацию во вложенном пространстве имен - PullRequest
2 голосов
/ 12 февраля 2012

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

Вот как выглядит код:

#include "Data\Types.hpp"

namespace GameEngine
{
    class Console
    {
    public:
        class Renderer : public RenderComponent2D
        {
        public:
            Renderer(Console*, const GameEngine::DataProcessing::FontData*);
//...

и в Data \ Types.hpp:

namespace GameEngine
{
    namespace DataProcessing
    {
        struct FontData;
//...

иMinGW дает мне ошибку:

'FontData' in namespace 'GameEngine::DataProcessing' does not name a type

Я ценю любую помощь или предложения по этой проблеме.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

У меня недавно была похожая проблема, которая оказалась незакрытым пространством имен, например,

namespace A {
    namespace B {
        class C {};
// failed to close both namespaces properly here

Что меня немного сбило с толку, так это то, что незакрытое пространство имен было на самом деле во вторичном файле, включенноммой файл cpp.Попробуйте покопаться в заголовках, чтобы увидеть, есть ли у них открытые пространства имен.

1 голос
/ 12 февраля 2012

Может быть проблема в объявлении метода.Вы уже находитесь в пространстве имен GameEngine:

namespace GameEngine
{
    class Console

Но в декларации вы также используете это пространство имен:

 Renderer(Console*, const GameEngine::DataProcessing::FontData*);

Попробуйте без GameEngine:

 Renderer(Console*, const DataProcessing::FontData*);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...