Переменная не была объявлена ​​в этой области Переполнение стека

я пытаюсь вызвать функцию в другом .h файле с именем display, который получает указатель на 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
}

-1

Решение

Вы заявляете:

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

но ты пытаешься позвонить

display(&balls_centroid_computed);

Обратите внимание на разницу между единственным _centroid_ и множественное число _centroids_

5

Другие решения

Я пытаюсь позвонить […] display() который получает указатель […]

Согласно прототипу, display() принимает ссылку, а не указатель.

Следовательно, вам не нужен амперсанд в

    display(balls_centroid_computed);
1

Функция display () на самом деле не получает указатель при вашем состоянии.

Если вы хотите, чтобы он получил указатель, объявите его следующим образом:

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

//do stuff

}

Амперсанд означает, что вы передаете «ссылку». Предлагаю вам только изменить

display (balls_centroid_computed)

Поскольку функция объявлена ​​как ссылка, вы все равно получите большинство преимуществ передачи указателей (избегая размещения всей структуры в стеке).

0
По вопросам рекламы [email protected]