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

Я пишу класс, 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);
}

2 ответа

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

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;
}

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

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

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

Другие вопросы по тегам