Если это ваш настоящий код, в этом нет ничего плохого:
#include <iostream>
#include <vector>
struct node{
std::string name;
};
int main(int argc, char *argv[]) {
// ... other code ...
std::vector<char> chars;
chars.push_back('n');
std::vector<node> nodes;
for(int i = 0; i < argc; i++) {
nodes.push_back(node());
for(auto ch : chars) {
switch(ch) {
case 'n': {
nodes[i].name = argv[i];
break;
}
}
}
}
// ... other code ...
for(auto n : nodes) {
std::cout << n.name << '\n';
}
return 0;
}
Когда я скомпилирую и запуском этого, я получу ожидаемый результат:
pax$ ./testprog a b c
./testprog
a
b
c
Поэтому мне нужнопредположим, что это не ваш реальный код, тем более что процесс создания одноэлементного вектора, содержащего 'n'
, и последующей работы над чем-то другим на основе каждого элемента в этом векторе 'n'
, скорее всего,эээ ... странно (это настолько дипломатично, насколько я понимаю).
Я бы предложил сократить ваш код до самого маленького, который демонстрирует проблему, и опубликовать ее.Отладка достаточно сложного кода, когда у нас есть исходный код, нет особых причин усложнять его, публикуя другой код: -)
Не видя действительногокод, мы можем все еще внести некоторые предложения о том, как вы можете определить, в чем заключается проблема.
Сначала, когда вы назначаете имя, выведите его, чтобы убедиться, что оно правильно установлено в этой точке (добавьтевторая строка ниже):
nodes[i].name = argv[i];
std::cout << "Added #" << i << " with value '" << nodes[i].name << "'\n";
break;
Во-вторых, убедитесь, что управляющий вектор делает то, что вы ожидаете (добавьте вторую строку ниже).Для каждого аргумента должна быть одна n
строка:
for(auto ch : chars) {
std::cout << "Control ch is '" << ch << "'\n";
switch(ch) {
В-третьих, проверьте размер вектора перед печатью, он должен быть ненулевым (добавьте первую строку ниже):
std::cout << "Vector size is " << n.size() << "\n";
for(auto n : nodes) {
std::cout << n.name << '\n';
}
Вы также должны вывести это, когда вы расширяете вектор (добавьте третью строку ниже):
for(int i = 0; i < argc; i++) {
nodes.push_back(node());
std::cout << "Vector size on build is " << n.size() << "\n";
Вывод этих отладочных операторов, надеюсь, даст вам более четкое представлениепредставьте себе, что ваши данные находятся на разных этапах кода, и вы сможете указать на проблемную область.