вложенный класс или структура в классе - PullRequest
1 голос
/ 14 сентября 2011

Код идет первым:

//. H file

class A
{
    public:
        A();
        B makeB(int);  //question 1
    //protected:
        struct B {
            int _id;
            B(int id);
        }
};

//. Cpp file

A::A()
{  cout<<"A ctor\n"; }

B A::makeB(int id)  //question 2
{  return B(id); }

2 вопроса:

1.Можно ли поставить функцию makeB () после определения структуры B?

2.В файле .cpp перед каждым B должен стоять префикс A ::?

PS: 1.Если функция makeB не имеет дело с экземплярами B, но указателями или ссылками B, могу ли я поместить прямое decl структуры B перед makeB? (Я просто не хочу помещать определение структуры B перед mem-funcs).

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Это прекрасно компилируется:

class A
{
 public:
    struct B;

    A();
    B makeB(int);  //question 1

    struct B {
        int _id;
        B(int id) {};
    };
};

A::A() {}

A::B A::makeB(int id)  //question 2
{  return B(id); }
1 голос
/ 14 сентября 2011

Q1. Да (необходимо знать размер структуры B)

QPS1. Да (если он использует только указатели на B, ему не нужно знать размер)

Q2. Кроме того, вы можете написать «используя A :: B», а затем использовать «B» как обычно.

0 голосов
/ 14 сентября 2011

Да и да.В противном случае это должно быть сложно скомпилировать.

...