ошибка компиляции c ++ - PullRequest
       20

ошибка компиляции c ++

0 голосов
/ 27 апреля 2010

я получил ошибку компиляции, которую я не понимаю. у меня есть комбинация файлов h / cpp, которая не содержит класс, а просто определяет некоторые служебные функции. когда я пытаюсь использовать структуру, определенную в другом классе, я получаю сообщение об ошибке:

ошибка C2027: использование неопределенного типа 'B :: C'

итак, урезанный до проблемы, h-файл выглядит так

namespace A {
    void foo(B::C::SStruct const & Var);
}

определение SStruct находится в классе, который находится в другом h-файле, который, конечно, включен.

namespace B {
    class C {
        public:
        struct SStruct { };
    };
}

Странно то, что я могу нормально использовать эту структуру в других классах, кажется, она просто связана с этим одним h-файлом, который содержит только служебные функции. что мне здесь не хватает? спасибо!

Ответы [ 4 ]

5 голосов
/ 27 апреля 2010

После исправления пропущенных точек с запятой и т. Д. Компилируется:

namespace B {
    class C {
        public:
        struct SStruct { };
    };
}
namespace A {
    void foo(B::C::SStruct const & Var);
}

Очевидно, что если бы порядок двух пространств имен был изменен, это не сработало бы. Возможно, вы # включая ваши заголовки в неправильном порядке. Если это ошибка, это плохой дизайн - вы не должны позволять порядку заголовков иметь значение в вашем коде.

0 голосов
/ 27 апреля 2010

В вашем классе отсутствует точка с запятой после определения. Должно быть:

namespace B {
    class C {
        public:
        struct SStruct { };
    }; // <=== Here
}
0 голосов
/ 27 апреля 2010
Class C { 
        struct SStruct { }; 
    } 

==>

class C { 
public:
        struct SStruct { }; 
    };
0 голосов
/ 27 апреля 2010

Полагаю, вы имели в виду "класс C", а не "класс C".

struct SStruct является закрытым для класса C (private - видимость членов класса по умолчанию).

Как таковой, он не виден вне класса C и его друзей, в которые не входит A :: foo ().

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