2010-12-06 2 views
1

Я пытаюсь создать 2D-массив для представления взвешенного графика. Чтобы сделать матрицу, я создаю массив массивов, как показано ниже в конструкторе. Эта матрица сохранит вес ребер, соединяющих два узла. Например, граф [1] [2] будет хранить вес ребра между точками 1 и 2.Ошибка при доступе к матрице в C++

Weighted_graph::Weighted_graph(int n):vertices(n){ 
double **graph= new double *[vertices]; 
nodeDegree=new int [n]; 
edges=0; 
for (int c=0;c<vertices;c++) 
{  
    graph[c] = new double[vertices]; 
    nodeDegree[c]=0;  
    for (int d=0;d<vertices;d++) 
    { 
     graph[c][d]=INF; 
    } 
} 

}

с графа определяется как double **graph;

Это похоже на работу, пока не попробовать для доступа к переменному графу из других функций, с которых происходит сбой программы. (INF правильно определяется далее в коде).

+1

У вас недостаточно информации для ответа на этот вопрос. Вам также нужно показать код, который действительно рушится. На первый взгляд, однако, double ** graph определен в этой функции и никогда не возвращался. Как другие функции будут знать, какое значение вы ему назначили? – patros 2010-12-06 22:38:23

+0

Что говорят `patros` и` Fritschy`, другие переменные не обращаются к этой переменной с именем `graph`, объем которой ограничен указанным конструктором. Они могут иметь доступ к некоторой другой переменной с тем же именем, но она по-прежнему является другой переменной. – 2010-12-06 22:44:35

ответ

1

Предполагаю, что вы ссылаетесь на член графа объекта, который вы строите. Однако граф объявляется как локальная переменная.

+0

Да, это была проблема с областью. Спасибо – Scott 2010-12-06 23:02:54

0

Это все о сфере видимости, потому что вы находитесь в функции, вы можете повторно использовать имя переменной, но это доступно только для инструктора. Удалите двойную ** из перед графиком в конструкторе.

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