我是一名学生,尚未接受过教学,但我现在需要使用它们。我正在尝试制作结构矢量。结构是汇编代码的标签。我每次想要添加标签时都会调整矢量大小,但是,当我尝试从标签中检索信息时,它们都是相同的。不幸的是,我实际上无法分享我的代码,但我会展示我认为帮助我解决这个问题的必要条件。那么,我做错了什么?如果您需要查看更多代码,请与我们联系。
全球宣布:
vector<Label> labeldir;
调整矢量大小并添加信息,label是汇编代码文件中标签的名称:
labeldir.resize(labelnum + 1);
labeldir[labelnum].name = label;
注意:它在while循环中运行,每次找到标签时都会标记labelnum。
访问每个Label的名称的示例:
for (int i = 0; i < labeldir.size(); i++){
cout << "Label entry " << i << " name : " << labeldir[i].name << endl;
}
相应的输出,注意问题(上面的代码是在while循环中,这是它的3次迭代):
Label entry 0 name : start
Label entry 0 name : done
Label entry 1 name : done
Label entry 0 name : five
Label entry 1 name : five
Label entry 2 name : five
汇编代码中的前3个标签,第一个和第二个标签之间会有行,但它们是常规指令。:
start add 1 2 1 decrement reg1
done halt end of program
five .fill 5
答案 0 :(得分:2)
有点难以确切地看出你做错了什么,但让我猜一下:
加载矢量的代码应该如下所示:
#include <string>
struct Label
{
Label(const std::string& N) : Name(N)
{}
Label()
{}
std::string Name;
};
int main()
{
std::vector<Label> labeldir;
labeldir.push_back(Label("one"));
labeldir.push_back(Label("two"));
labeldir.push_back(Label("three"));
labeldir.push_back(Label("four"));
int i = 0;
for(auto l : labeldir)
{
std::cout << "Label entry " << i++ << " name : " << l.Name << "\n";
}
system("PAUSE");
return 0;
}
答案 1 :(得分:2)
我几乎打赌你name
结构的Label
成员是char *
。这意味着不是为每个标签创建一个单独的字符串,而是只创建单独的指针 - 但它们都指向同一个地方。
当您尝试打印出内容时,它们都指向同一个缓冲区,因此每个Label都会显示最近读入该缓冲区的名称。
治愈:使用std::string
代替char *
。
答案 2 :(得分:0)
根据您提供的信息,我假设您在向label markdir添加标签名称时遇到问题。
无论何时找到标签,您都可以通过以下方式添加:
vector<Label> laberdir;
//As you fill the struct label with the name
Label label1;
label1.name = "start";
labeldir.pushback(label1);
labelNum = labelNum + 1;
并且因为您感到悲伤,Label的结构类型为
struct Label
{
std::string name;
};