1

以下は、境界ボックスをより小さな部分に分割するために行ったクラスです。

class reticula
{   
    int _columnas;
    int _renglones;
    int _num_pixelotes;
    vector<vector<Point> > Pixelotes;

public:
reticula():
_columnas(0),
_renglones(0),
_num_pixelotes(0),
Pixelotes(){};
/// crear la reticula con los valores deseados 
reticula(vector<Point> verticesB, int renglon, int columna);

Size size(void);
vector<Point> en(int el_renglon, int la_columna);
~reticula(void);
};  

reticula::reticula(vector<Point> verticesB, int renglon, int columna ){
if(verticesB.size()!= 4){
    cout<< "El vector debe tener las 4 esquinas del rectangulo a dividir"
        << endl;    
    throw 400; // es para mandar la exepción. 
}
_columnas = columna;
_renglones = renglon;
_num_pixelotes = columna * renglon ;
Pixelotes.resize(_renglones * _columnas); 
double dis_mayor, dis_menor;//con respecto a los ejes 
Point dif_10;
Point dif_21;
Point dif_32;
Point dif_03;
double es_mayor, es_menor;


dif_10 = verticesB[1]-verticesB[0];
dif_21 = verticesB[2]-verticesB[1];
dif_32 = verticesB[3]-verticesB[2];
dif_03 = verticesB[0]-verticesB[3];

dis_mayor = norm(dif_10);
dis_menor = norm(dif_21);

es_mayor = dis_mayor/(double) _columnas;
es_menor = dis_menor/(double) _renglones;
Point aux;
Point aux2;
vector<Point> vertices_re((_columnas + 1)*(_renglones + 1));
for (int i = 0; i < _renglones; i++){
    for(int j= 0; j < _columnas; j++){
        for(int h=0; h < 4; h++ ){
            aux = verticesB[0] + ((((double)j*dis_mayor) * dif_10) + (((double)i * dis_menor)*dif_21));
            if(h=0){aux2= aux;}
            else if(h=1){aux2= aux + (dis_mayor * dif_10);}
            else if(h=2){aux2= aux + (dis_mayor * dif_10) + (dis_menor * dif_21);}
            else if(h=3){aux2= aux + (dis_menor * dif_21);}
            Pixelotes[i * _columnas + j].push_back(aux2);
        }
    }
}


}


Size reticula::size(void){
Size Total;
Total.width = _columnas;
Total.height = _renglones;
return Total;

}

vector<Point> reticula::en(int el_renglon, int la_columna){
if(el_renglon > _renglones|| la_columna> _columnas){
    cout << " el renglon y la columna se deben encontrar dentro de los parametros "
        <<endl;
    cout<< _renglones<<" , "<<_columnas<<endl;
    vector<Point> vacio;
    vacio.push_back(Point(0,0));
    return (vacio);
}
int busca;
busca = el_renglon * _columnas + la_columna;    
}

そして、このクラスを含むベクターを作成したいのですが、何が間違っているのかわかりません

vector<reticula> SoloReti(contours.size());
for(int g=0; g< SoloReti.size(); g++){
    SoloReti[g].reticula(contours[g], 5,4);
}

g++ コンパイラは、「reticula::reticula の無効な使用」と通知します。誰かが問題の場所を教えてもらえますか?

4

2 に答える 2

1

を宣言すると、デフォルトのコンストラクターを使用してレティキュラ ビルドでvector<reticula> SoloReti(contours.size())ベクターが初期化されます。contours.size()reticula()

するとSoloReti[g].reticula、すでに構築されたオブジェクトからコンストラクターを呼び出そうとしています。解決策: 代入演算子を使用します:

vector<reticula> SoloReti(contours.size());
for(int g=0; g< SoloReti.size(); g++){
    SoloReti[g] = reticula(contours[g], 5,4);
}
于 2012-10-11T22:00:13.490 に答える
0

私はこれがあなたが望むものだと思います:

vector<reticula> SoloReti;

for(int g = 0; g < countors.size(); g++)
{
    reticula tmp(contours[g], 5, 4); 
    SoloReti.push_back(tmp);
}
于 2012-10-11T22:04:22.100 に答える