2015-08-05 2 views
0

Это не совсем работает. Давайте посмотрим, можем ли мы совместно расширить наши знания по этому вопросу. Хорошо:Прохождение указателей через несколько функций из main() C++

vector<vector<Point>> aVectorOfPoints 
int main(){ 
    someConstructor(&aVectorOfPoints) 
} 

someConstructor(vector<vector<Point>>* aVectorOfPoints){ 
    functionOne(aVectorOfPOints); 
} 

functionOne(vector<vector<Point>>* aVectorOfPOints){ 
    aVectorOfPoints[i][j] = getPointFromClass(); 
} 
//functionX(...){...} 

Я получаю некоторую ошибку под назначением в функции One. Как я могу это сделать лучше? Благодарю.

Конкретная ошибка: «Без оператора» = «соответствует этим операндам».

+0

Как определяется «точка»? –

+0

@RSahu определяется как std-точка. Я на самом деле получаю эту точку внутри конструктора и помещаю его внутри самого вектора. Который будет использоваться вне класса. – hownowbrowncow

+0

Ошибка? Какие ошибки? Ошибки компилятора? – elimad

ответ

1

Почему это неправильно?

aVectorOfPoints[i][j] = getPointFromClass(); 

тип aVectorOfPoints является vector<vector<Point>>*.
тип aVectorOfPoints[i] есть vector<vector<Point>>.
тип aVectorOfPoints[i][j] есть vector<Point>.

A Point не может быть присвоен значению vector<Point>. Следовательно, ошибка компилятора.

Возможно, вы имели в виду использовать:

(*aVectorOfPoints)[i][j] = getPointFromClass(); 

Вы можете упростить код, передавая ссылки.

int main(){ 
    someConstructor(aVectorOfPoints) 
} 

someConstructor(vector<vector<Point>>& aVectorOfPoints){ 
    functionOne(aVectorOfPOints); 
} 

functionOne(vector<vector<Point>>& aVectorOfPOints){ 
    aVectorOfPoints[i][j] = getPointFromClass(); 
} 
+0

Спасибо, что с помощью справки работает намного лучше. Есть ли преимущество в указателе прохода и маршруте? – hownowbrowncow

+2

@hownowbrowncow нет, это хуже. Используйте ссылки –

+0

@MattMcNabb спасибо m8. – hownowbrowncow

1

Используйте ссылки вместо указателей:

someConstructor(vector<vector<Point>> &aVectorOfPoints) { 

и то же самое для functionOne.

Ваша ошибка: aVectorOfPoints[i] указывает указатель на i. Если вы используете указатели, вам нужно сначала разыменовать указатель, прежде чем делать это, написав (*aVectorOfPoints)[i][j].

+0

Спасибо, учтите, как правильно разыгрывать? – hownowbrowncow

+1

@hownowbrowncow OK –

Смежные вопросы