в последней строке, вам нужно форсировать порядок оценки, используя (* it) -> data вместо просто * it-> data. Как упомянул Джордж, приоритет оператора работает против вас.
Кстати, у меня было бы 3 дополнительных замечания:
1) если пространство для вашего поля данных выделено через strdup (), это означает, что оно выделено функцией malloc (). Следовательно, он должен быть позже освобожден функцией free (). И вам не следует пытаться использовать new () для некоторых объектов Word и malloc () для других.
2) в конечном счете, вы можете захотеть работать с правильными объектами C ++ std :: string, а не с символьными строками в стиле C, заканчивающимися NUL.
3) вам гораздо труднее помочь, если вы не используете достаточно пустого пространства для ясности и если вы не делаете отступ в коде должным образом. Пожалуйста, ознакомьтесь с приведенными ниже ссылками.
https://www.cprogramming.com/tutorial/style.html
https://www.learncpp.com/cpp-tutorial/whitespace-and-basic-formatting/
Полное руководство и список книг C ++
#include <vector>
#include <iostream>
#include <cstring>
struct Word
{
char* data;
Word(const char* data_) : data(strdup(data_))
{
}
Word() : Word("")
{
// default constructor delegated to main one
}
~Word() // destructor
{
free(this->data);
}
};
static std::vector<Word*> s_wordsArray;
int main()
{
Word* w = new Word("Hello");
for(int i=0 ; i<5 ; i++) {
s_wordsArray.push_back(w);
}
//--std::vector<Word*>::iterator it; // not required, see line below
for (auto it = s_wordsArray.begin(); it != s_wordsArray.end(); it++)
std::cout << (*it)->data << " " << "\n"; // mind parenthesis !!!
}