Я изучаю C ++, и я столкнулся с похожей ситуацией в своем задании. Каждая из моих попыток решить это дело сопровождалась несколькими вопросами, поэтому я упростил это здесь.
Для этого сценария я буду использовать этот класс:
class Story {
string _title;
//a simple getter
string getTitle(){
return _title;
}
};
Теперь в моей основной функции у меня есть stories
, указатель на вектор с указателями на Story
:
vector<Story *> * stories = function();
Моя цель - получить доступ к _title
первого Story
в моем векторе (мой размер вектора всегда будет больше 0).
Для этого я попробовал несколько методов, которые, как мне показалось, будут работать:
//Attempt 1 (doesn't work)
*(stories)[0]->title();
//I thought `*(stories)[0]` returns the first `Story*`
/** Error message:
* error: ‘class std::vector<Story*>’ has no member named ‘title’
*/
//Attempt 1.5 (equivalent to Attempt 1)
*(stories).at(0)->title();
//Attempt 2 (works)
stories->at(0)->title();
//Aren't `*(stories).at(0)` and `stories->at(0)` the same?
//Since Attempt 1.5 failed, there as to be a difference..
//Attempt 3 (doesn't work)
stories->begin()->title();
//I thought `stories->begin()` returns the first `Story*`
/** Error message:
* error: request for member ‘title’ in
* ‘* stories->std::vector<Story*>::begin().__gnu_cxx::__normal_iterator<Story**, std::vector<Story*> >::operator->()’, which is of pointer type ‘Story*’
* (maybe you meant to use ‘->’ ?)
*/
Я понимаю, почему моя Попытка 2 работает, но я не понимаю, почему 1, 1.5 и 3 не работают.
На всякий случай, я компилирую, используя следующие параметры:
--std=c++11 -O0 -ggdb -Wall -Wextra