Я пишу класс, 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);
}
Я не верю, что вам нужен указатель здесь, просто объявите его как:
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 бит на бул), так что вы заново изобретаете колесо.