我正在尝试用C ++创建一个集合矩阵,但是我得到一个错误,即没有匹配的函数可以调用。这是我的代码:
supermercat.hh
#ifndef SUPERMERCAT_HH
#define SUPERMERCAT_HH
#include <vector>
#include <iostream>
#include <set>
#include "producte.hh"
using namespace std;
class supermercat
{
private:
vector <vector <set <producte> > > estructura;
public:
// Constructores
supermercat();
//Modificadores
void crear_estructura(int col, int fil);
void repostar_estanteries(producte prod, string lloc);
supermercat.cc
#include "supermercat.hh"
supermercat::supermercat() {}
void supermercat::crear_estructura(int col, int fil)
{
vector <vector <set <producte> > > estructura(col, vector<producte>(fil));
}
void supermercat::repostar_estanteries(producte prod, string lloc)
{
estructura[lloc[0] - 'A'][lloc[1] - 1].insert(prod);
}
有谁知道我做错了什么?我只是想不出来。 我过去曾尝试将其作为矢量矩阵,但是对矩阵中的每个矢量进行排序都很烦人(因为我需要'产品'按字母顺序排序)。
答案 0 :(得分:1)
我认为问题在于你的crear_estructura方法实现。在基类(supermercat)中,您拥有私有成员:
vector <vector <set <producte> > > estructura;
在实现部分中,您尝试执行以下操作:
vector <vector <set <producte> > > estructura(col, vector<producte>(fil));
并且它没有在别处定义(对我来说,这一行是一个声明,它没有实现任何东西)。
另外,输入:
vector<producte>(fil)
在之前的定义中相当奇怪。您的意思是使用方括号,即[]
而不是()
吗?例如。 vector<producte> prods[fill]
。
由于你的解决方案有些棘手,我建议稍微简化一下。快速解决方案是创建一个新的类estructura(适当填写):
class estructura
{
private:
vector <vector <set <producte> > > _mestruct;
public:
estructura(int col, vector<producte> fil);
~estructura();
}
然后实现构造函数以满足您的要求。之后,在supermercat类中使用它,如下所示:
class supermercat
{
private:
estructura structdata;
public:
... (like before)
}
你的supermercat构造函数实现应该是这样的:
void supermercat::crear_estructura(int col, vector<producte> fil)
{
estructura(col, fil);
}
我希望这会帮助你解决问题。
答案 1 :(得分:0)
你遇到的问题是向量初始化,你应该使用resize()调整第一个维度的大小,然后调整每个项目的大小以调整向量的另一个维度,这里有一个简单的例子:
#include <iostream>
#include <vector>
#include <set>
std::vector< std::vector< std::set<int> > > test;
int main()
{
test.resize(100);
// if not c++11 replace with for (i = 0; i < 100; ++i) test[i].resize(100)
for (auto &a: test)
a.resize(100);
test[20][20].insert(1);
test[30][30].insert(1);
test[30][30].insert(2);
std::cout << "(20,20): " << *test[20][20].begin() << std::endl;
std::cout << "(30,30): size " << test[30][30].size() << std::endl;
}
在“create_estructura”方法中使用此语法应该类似于:
void supermercat::crear_estructura(int col, int fil)
{
estructura.resize(col);
for (auto &a: estructura) a.resize(fil);
}
“estructura”中的每个项目都包含一个空集。