-1

のポインタを受け取るdisplayという名前の別の.hファイルで関数を呼び出そうとしていますが、std::vector<vector<double> >呼び出そうとすると、このスコープで変数が宣言されていないというエラーが発生します。これがコードのサンプルです。お役に立てば幸いです。

//proper includes above
#include <vector>
#include "display.h"
#include "extract_balls.h"

int main(void)   
{
    std::vector<vector<double> > balls_centroids;
    std::vector<vector<double> > balls_centroids_computed;

    balls_centroids = extract_balls();

    for (vector< vector<double> >::size_type u = 0; u < balls_centroids.size(); u++) {
        vector<double> x = balls_centroids.at(u);
        x[0] = farest_point[0]-x[0];
        x[1] = farest_point[1]-x[1];
        x[2] = farest_point[2]-x[2];
        balls_centroids_computed.push_back(x);
    }

    display(&balls_centroid_computed);
}

display.hファイルは次のようなものです。

#include <vector>

void display(std::vector<std::vector<double> >& coord){

           //do stuff
}
4

3 に答える 3

5

あなたは宣言します:

std::vector<vector<double> > balls_centroids_computed;

しかし、あなたは電話しようとします

display(&balls_centroid_computed);

_centroid_単数形と複数形の違いに注意_centroids_...

于 2013-01-03T18:46:12.270 に答える
1

display()ポインタを受け取る[...]を呼び出そうとしています[...]

プロトタイプによるとdisplay()、ポインタではなく参照を取ります。

したがって、アンパサンドは必要ありません

    display(balls_centroid_computed);
于 2013-01-03T18:37:28.517 に答える
0

display() 関数は、あなたが述べているように、実際にはポインターを受け取りません。

ポインターを受け取りたい場合は、次のように宣言します。

void display(std::vector<std::vector<double> > * coord){

       //do stuff

}

アンパサンドは、「参照」を渡すことを意味します。あなただけを変更することをお勧めします

display (balls_centroid_computed)

関数は参照として宣言されているため、ポインターを渡すことのほとんどの利点を引き続き得ることができます (構造全体をスタックに置くことを回避できます)。

于 2013-01-03T18:49:15.513 に答える