我试图声明一个结构,

struct Sample {
    int classLabel[2];
    vector<Mat> image;
};

现在我要使用它,我将其初始化为
Sample sample1;

并在sample1中保存5张图像,并创建另一个Sample sample2并保存另外5张图像。
现在我想将这两个样本保存在Sample的 vector 中。我宣布:
vector<Sample> samples;

现在当我尝试在样本中push_back sample1和sample2时
samples.push_back(sample1);
samples.push_back(sample2);

它什么也没有给我。样本显示为samples[2],但在classLabel=???image=????前面不包含带问号的内容

任何人都能指导我在哪里做错了。我如何使它可用。我的意思是将struct sample1sample2保存在samples中。
会感激的。
问候

最佳答案

vector<Sample> samples;
samples.push_back(sample1);
samples.push_back(sample2);

此后,samples的大小为2。因此,您只能访问samples[0]samples[1],而不能访问samples[2]

如@sammy所评论,Watch中的变量在VS中可能显示不正确的值。

要使其正常工作,您可能需要执行以下步骤:
  • 检查应用程序及其依赖项(如果需要)是否以调试模式构建。
  • 确保禁用优化。编译时使用 /Od 选项。
  • 结构成员对齐。当一堆项目一起编译时,项目中此字段的值可能会变化,从而导致无效的显示值。重置为所有项目的默认值。该值位于配置属性-> C / C++->代码生成->结构成员对齐下。

  • 查看here了解更多信息。

    编辑:对于注释中的代码:
    sample1.classlabel[0] = 0;
    sample1.classlabel[1]=1;
    vector<Mat> temp;
    temp.push_back(img1);
    temp.push_back(img2);
    temp.push_back(img3);
    sample1.image=temp;
    
    sample2.classlabel[0] = 0;
    sample2.classlabel[1]=1;
    vector<Mat> temp1;
    temp.push_back(img5);         // problem
    temp.push_back(img6);         // problem
    temp.push_back(img7);         // problem
    sample2.image=temp1;
    
    samples.push_back(sample1);
    samples.push_back(sample2);
    

    3个问题行应更改为
    temp1.push_back(img5);
    temp1.push_back(img6);
    temp1.push_back(img7);
    

    关于c++ - 如何使用包含vector <Mat>的Struct Vector,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22180054/

    10-11 22:00