C ++: неизвестный размер указателя при объявлении вперед (ошибка C2036) - PullRequest
3 голосов
/ 15 июня 2010

В заголовочном файле я объявил два члена пространства имен:

namespace Foo {
    struct Odp
    typedef std::vector<Odp> ODPVEC;
};

class Bar
{
public:
     Foo::ODPVEC baz; // C2036
};

Ошибка, сгенерированная компилятором:

error C2036: 'Foo::Odp *': unknown size

Полагаю, это проблема с объявлением форварда Odp. Как я могу обойти это?

Ответы [ 2 ]

3 голосов
/ 15 июня 2010

std::vector требует полного объявления типа первого параметра шаблона, поскольку он хранит объекты по значению , а не по указателю и, следовательно, требует знания размера объекта. Вы можете сойти с предварительным объявлением, если вы храните указатели в векторе, например:

class foo;
typedef std::vector<foo*> foo_ptr_vec;

См. прекрасную документацию для подробностей.

3 голосов
/ 15 июня 2010

Не пересылать объявить Odp.Компилятор не знает, какой тип std::vector<Odp>, потому что Odp еще не объявлен.Дайте компилятору полное объявление для этого класса.

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