簡體   English   中英

3d向量的'operator ='不匹配

[英]no match for 'operator =' for 3d vector

我正在嘗試將坐標std :: vector曲面的向量轉換為3D數組,並將曲面中包含的3d數組的所有條目設置為0; 但是我找不到運算符數組的匹配項。 我多次查找錯誤,但沒有找到我的案子。

std::vector<coordinates>表面是全局的。 coordiantes只是看起來像

struct coords{
    int xvalue;
    int yvalue;
    int zvalue;

    coords(int x1, int y1, int z1) : xvalue(x1),yvalue(y1),zvalue(z1){}
    ~coords(){}
};
typedef struct coords coordinates;

我的方法是:

(doubleBox是3D雙矢量的typedef)

doubleBox levelset::putIntoBox( vector<coordinates> surface){
    int xMaxs, yMaxs,zMaxs;
    for (vector<coordinates>::iterator it = surface.begin() ; it != surface.end(); ++it){
        if (it->xvalue > xMaxs)
            xMaxs = it->xvalue;
        if (it->yvalue > yMaxs)
            yMaxs = it->yvalue;
        if (it->zvalue > zMaxs)
            zMaxs = it->zvalue;
        //check invalid surface
        if (it->xvalue < 0 || it->yvalue <0 || it->zvalue<0)
            cout << "invalid surface with point coordinates below 0 !" << endl;
    }
    doubleBox surfaceBox[xMaxs+1][yMaxs+1][zMaxs+1];

    int max = std::ceil(sqrt(xMaxs*xMaxs + yMaxs*yMaxs + zMaxs*zMaxs));
    std::fill(&surfaceBox[0][0][0],&surfaceBox[0][0][0] + sizeof(surfaceBox)*sizeof(surfaceBox[0])/ sizeof(surfaceBox[0][0]) / sizeof(surfaceBox[0][0]), max);

    for (vector<coordinates>::iterator it = surface.begin() ; it != surface.end(); it++){
        surfaceBox[it->xvalue][it->yvalue][it->zvalue] = 0.0;
    }

    return surfaceBox;
}

輸出為(聲明錯誤位於第二個for循環中)

c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\vector.tcc:160:5: note: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = std::vector<std::vector<double> >; _Alloc = std::allocator<std::vector<std::vector<double> > >]
     vector<_Tp, _Alloc>::
     ^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\vector.tcc:160:5: note:   no known conversion for argument 1 from 'const int' to 'const std::vector<std::vector<std::vector<double> > >&'
..\src\Levelset.cpp: In member function 'doubleBox levelset::putIntoBox(std::vector<coords>)':
..\src\Levelset.cpp:295:1: warning: control reaches end of non-void function [-Wreturn-type]

也許這個問題是由於std :: fill使用不當引起的?

由於doubleBox被定義為std::vector<std::vector<std::vector<double> ,為什么要定義doubleBox surfaceBox[xMaxs+1][yMaxs+1][zMaxs+1]; 通過這種方式?

您定義的是一個3維數組,其元素類型為doubleBox ,這意味着每個元素的類型都不是您想要的std::vector<std::vector<std::vector<double>

您可能需要類似doubleBox surfaceBox(xMaxs + 1, std::vector<std::vector<double>>(yMaxs + 1, std::vector<double>(zMaxs + 1)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM