Как мне переслать объявление внутреннего класса? [Дубликат]

Они имеют тип char[N], где N - количество символов, включая завершающий \0. Поэтому да, вы можете назначить их char*, но вы все равно не можете писать им (эффект будет неопределенным).

Wrt argv: указывает на массив указателей на строки. Эти строки явно изменяемы. Вы можете изменить их, и они должны удерживать последнее сохраненное значение.

140
задан Community 23 May 2017 в 12:10
поделиться

3 ответа

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

Вам необходимо выполнить одно из следующих действий

  • Сделать класс невложенным
  • Измените порядок объявления так, чтобы вложенный класс был полностью определен первым
  • Создайте общий базовый класс, который может быть как используется в функции и реализуется вложенным классом.
129
ответ дан 23 November 2019 в 22:50
поделиться

Я не верю, что прямое объявление внутреннего класса для неполного класса работает (потому что без определения класса невозможно узнать, действительно ли является внутренним класс). Таким образом, вам нужно будет включить определение контейнера с внутренним классом, объявленным вперед:

class Container {
public:
    class Iterator;
};

Затем в отдельном заголовке реализовать Container :: Iterator:

class Container::Iterator {
};

Затем # включить только заголовок контейнера (или не беспокоиться о пересылке объявить и просто включить оба)

23
ответ дан 23 November 2019 в 22:50
поделиться

Я не знаю способа сделать именно то, что вы хотите, но вот обходной путь, если вы хотите использовать шаблоны:

// Foo.h  
struct Foo
{
   export template<class T> void Read(T it);
};

// Foo.cpp
#include "Foo.h"
#include "Container.h"
/*
struct Container
{
    struct Inner { };
};
*/
export template<> 
  void Foo::Read<Container::Inner>(Container::Inner& it)
{

}

#include "Foo.h"
int main()
{
  Foo f;
  Container::Inner i;
  f.Read(i);  // ok
  f.Read(3);  // error
}

Надеюсь, эта идиома может быть вам полезна (и, надеюсь, ваш компилятор основан на EDG и реализует экспорт;)).

1
ответ дан 23 November 2019 в 22:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: