Размер вектора от указателя

Я пишу класс, BitVector, где у меня есть метод, который возвращает емкость BitVector. Я думал о том, чтобы вызвать std :: vectoracity (), но я получаю ошибку, из-за которой я немного запутался. Ниже мой метод:

int BitVector::Size() {
int size = (int) this->bitVector().capacity();
}

Ошибка, с которой я сталкиваюсь: «Выражение в скобках видимого вызова должно иметь (указатель на) тип функции. В чем здесь проблема?

Дополнительная справочная информация о моем классе:

Мой класс BitVector имеет обычные открытые конструкторы, деконструкторы и т. Д., А затем закрытый указатель на вектор следующим образом:

private:
std::vector<uint8_t>* bitVector;

В моем конструкторе я указываю указатель на вектор в куче следующим образом:

BitVector::BitVector(int numBits) {
this->bitVector = new std::vector<uint8_t> (numBits, 0);
}

1

Решение

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

private:
std::vector<uint8_t> bitVector;

Вы не должны this-> префикс для доступа к членам класса, и int не является хорошим типом для выражения значения емкости (что такое средство емкости, значение которого является отрицательным?). Итак, в вашей функции я бы сделал:

int BitVector::Size() {
auto size = bitVector.capacity();
}

но если действительно нужен указатель, вы можете сделать:

int BitVector::Size() {
auto size = bitVector->capacity();
}

используя указатель

отредактированный

Как указывает @Donnie, тип возвращаемого значения этой функции также становится неправильным. Если вы используете C ++ 14 и предполагаете, что хотите вернуть size переменная, вы можете сделать вашу жизнь простой, просто позволяя компилятору использовать то, что bitvector.capacity() использует для хранения своих значений. Итак, ваша функция должна быть:

auto BitVector::Size() {
auto size = bitVector.capacity();
return size;
}
2

Другие решения

bitVector это просто член, а не функция. Это также указатель.

int size = (int)this->bitVector->capacity();

Также обратите внимание, что std::vector<bool> является уже специализированный в битовый вектор (используя 1 бит на бул), так что вы заново изобретаете колесо.

1

По вопросам рекламы [email protected]