Я пытаюсь создать временный объект C ++ для того же быстрого вызова в конструкторе и ничего больше.
По какой-то причине это не работает
Вот код:
typedef std::vector<std::string> string_vec_t;
//-------------------------------------------------------------------------
struct visit_items
{
virtual void action(std::string *s) = 0;
};
void items_visitor(visit_items *v)
{
string_vec_t l = { "1", "2", "3", "4" };
for (auto &s: l)
v->action(&s);
}
struct my_visit_items: visit_items
{
public:
string_vec_t *r;
my_visit_items(string_vec_t *r /*, int */): r(r)
{
items_visitor(this);
}
virtual void action(std::string *s) override
{
r->push_back(*s);
printf("visited: %s\n", s->c_str());
}
};
//-------------------------------------------------------------------------
int main(int argc)
{
string_vec_t r;
r.push_back("1");
my_visit_items(&r /*, 0 */);
return -1;
}
Если у меня ctor принимает дополнительный аргумент, то проблем нет.Но, как оно есть, это не работает, и я не понимаю ошибку:
1>error C2040: 'r': 'my_visit_items &' differs in levels of indirection from 'string_vec_t'
1>error C2530: 'r': references must be initialized