Я смотрел на это некоторое время и не очень далеко.FruitBasketFactory, FruitBasket и Fruit - это три класса из API, который я использую.Моя цель - сделать корзину с фруктами, а затем забрать фрукты.Согласно FruitBasketFactory.hpp:
const FruitBasket* getFruitBasket() const;
, а затем в FruitBasket.hpp
size_t getNumFruits() const;
const Fruit& operator[](size_t index) const;
Итак, вот мой начальный код:
FruitBasketFactory fruitBasketFactory;
//since I want an object rather than a pointer I attempt to dereference the pointer
const FruitBasket fruitBasket = *(fruitBasketFactory.getFruitBasket());
Но вот яполучить ошибку "ошибка C2248: 'FruitBasket :: FruitBasket': невозможно получить доступ к закрытому члену, объявленному в классе 'FruitBasket'" .Разве это не должно работать?
Итак, хорошо ... Я переделываю свой код.
FruitBasketFactory fruitBasketFactory;
const FruitBasket* fruitBasket = fruitBasketFactory.getFruitBasket();
if(fruitBasket->getNumFruits() > 0) {
//using (*fruitBasket)[0] seems silly
const Fruit fruit = (*fruitBasket)[0];
}
И ошибка : "Ошибка C2248: 'Fruit:: Fruit ': не может получить доступ к закрытому члену, объявленному в классе' Fruit '"
Итак, еще одна доработка
FruitBasketFactory fruitBasketFactory;
const FruitBasket* fruitBasket = fruitBasketFactory.getFruitBasket();
if(fruitBasket->getNumFruits() > 0) {
//this is just ludicrous ... I'm doing something wrong
const Fruit* fruit = &(fruitBasket->operator[](0));
}
Как бы глупо ни выглядел этот код, он действительно работает,Но почему я могу просто сделать то, что я считаю наиболее очевидным?
FruitBasketFactory fruitBasketFactory;
const FruitBasket fruitBasket = *(fruitBasketFactory.getFruitBasket());
if(fruitBasket.getNumFruits() > 0) {
const Fruit fruit = fruitBasket[0];
}
Разрешение:
Конструкторы копирования действительно были заблокированы как для FruitBasket, так и для Fruit.Мне удалось обойти их, создавая ссылки следующим образом:
FruitBasketFactory fruitBasketFactory;
const FruitBasket& fruitBasket = *(fruitBasketFactory.getFruitBasket());
if(fruitBasket.getNumFruits() > 0) {
const Fruit& fruit = fruitBasket[0];
}