gpt4 book ai didi

c++ - 无法将值存储到 vector 结构中

转载 作者:搜寻专家 更新时间:2023-10-31 02:03:54 25 4
gpt4 key购买 nike

所以我试图在这个结构中存储一个字符串:

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;
}

整个程序编译运行但没有输出n.name。似乎它只是在其开关 block 中设置节点 [i] 的值,但我不确定为什么会这样。在调试和查看 gdb 中的值时,节点 [i] 的值是在该开关 block 的情况下设置的,但是,当我查看整个数组(打印节点)时,它显示我没有在结构中设置名称字段。当我完全离开开关 block (在循环的新迭代中)并查看该节点的值(例如节点[0])时,我也没有看到在那里设置的名称值。

我不确定我做错了什么,我是 C++ 的新手(熟悉 C)但是 argv[i](被转换成 C++ 字符串并且是在开关范围之外声明)或在循环迭代开始时被推回的新节点超出范围。

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

如果这是您的实际代码,那么它没有任何问题:

#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' 的单元素 vector 然后在其他基于该 vector 中的每个元素都是 'n' 似乎相当,错误,......奇怪(这是我能得到的尽可能外交)。

我的建议是将您的代码精简到出现问题的最小代码并发布。当我们拥有源代码时调试代码已经够难的了,没有理由通过发布不同代码来让它变得更难:-)


在没有看到实际代码的情况下,我们仍然可以就如何辨别问题所在提出一些建议。

首先,在您分配名称的地方输出它以确保它在那个时候设置正确(在下面添加第二行):

nodes[i].name = argv[i];
std::cout << "Added #" << i << " with value '" << nodes[i].name << "'\n";
break;

其次,确保控制 vector 按照您的预期进行(添加下面的第二行)。每个参数应该有一个 n 行:

for(auto ch : chars) {
std::cout << "Control ch is '" << ch << "'\n";
switch(ch) {

第三,打印前检查 vector 大小,它应该是非零的(在下面添加第一行):

std::cout << "Vector size is " << n.size() << "\n";
for(auto n : nodes) {
std::cout << n.name << '\n';
}

您还应该在扩展 vector 时输出这个(在下面添加第三行):

for(int i = 0; i < argc; i++) {
nodes.push_back(node());
std::cout << "Vector size on build is " << n.size() << "\n";

这些调试语句的输出有望让您更清楚地了解您的数据在代码的各个阶段是什么,并允许您定位问题区域。

关于c++ - 无法将值存储到 vector 结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54623383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com