построить вектор C ++ - PullRequest
       31

построить вектор C ++

0 голосов
/ 24 февраля 2012

В настоящее время я работаю над реализацией функции конструктора для векторного класса (мой профессор сказал, что мы можем опустить все, что использует распределитель).Я использовал справочный сайт, который мне дал мой профессор, чтобы определить формат функции: http://www.cplusplus.com/reference/stl/vector/vector/

Я получаю некоторые ошибки в своей функции.Две ошибки:

синтаксическая ошибка: идентификатор 'size_type'

'значение': необъявленный идентификатор

Есть идеи, почему я получаю эти ошибки?Вот мой код:

explicit vector (size_type n, const T& value= T())
{
    my_vect=new int x[2*n];
    for(int i=0; i<n; i++)
    {
        vect[i]=value;
        length++;
    }
}

Ответы [ 2 ]

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

Если вы определяете свой класс в файле .h, то = T() является значением по умолчанию. При реализации метода в файле .cpp или .cc вы пропускаете значение по умолчанию.

size_type, по-видимому, не находится в глобальной области видимости, поэтому вам нужно использовать оператор разрешения, чтобы дать ему правильную область видимости. Похоже, что std::string::size_type. Это, вероятно, просто typedef для size_t. Я вижу size_type в контейнерах STL, но никогда не использовал его при создании своих собственных классов.

Также, как упоминал Дитмар Кюль, при использовании шаблонов C ++ вам нужно все украшать с помощью template <typename T>

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

Этому коду не хватает контекста.Это затрудняет определение проблемы.Из сообщения об ошибке кажется, что вы, по крайней мере, не определили size_type.Также выглядит, как будто T не определено, что заставляет меня думать, что вы пытаетесь определить конструктор вне строки, но это будет выглядеть примерно так:

template <typename T>
vector<T>::vector(size_type n, T const& value):
    my_vect(new T[2u * n]),
    length(n)
{
    for (size_type i(0); i != n; ++i) {
        my_vect[i] = value;
    }
   // or: std::fill_n(my_vect, n, value);
}

Это также исправило несколько ошибокint против T, vect против my_vext, неинициализированное использование length).Обратите внимание, что идиоматический способ приращения переменной в C ++ заключается в использовании преинкремента (да, язык на самом деле должен называться «++ C» по большему количеству причин, чем просто идиоматическое использование).

...