2015-04-30 2 views
0

Здравствуйте у меня есть геттер в матрица смежности классаполучить значение из другого класса C++

int AdjacencyMatrix::getVertexFirst() const { return vertexFirst; } 

и конструктор

AdjacencyMatrix::AdjacencyMatrix() { 
    this->vertexCount=0; 
    this->vertexFirst=0; 
    this->edgeCount=0; 
    this->matrix=0; 
    this->wage=0; 

} 

bool AdjacencyMatrix::createFromFile(string path) { 
    fstream file; 
    file.open(path.c_str(), fstream::in); 
    if (file.good()) 
    { 
     int vertexF,vertexE,wag;    
     file >> this->edgeCount; 
     file >> this->vertexCount; 
     file >> this->vertexFirst;  

     matrix = new int *[vertexCount]; 
     wage = new int *[vertexCount]; 

     for (int i = 0; i < vertexCount; i++) 
     { 
      matrix[i]=new int[vertexCount]; 
      wage[i]=new int[vertexCount]; 
     } 

     //fill matrix by zeros 
     for (int i = 0; i < vertexCount; i++) 
     { 

      for(int j=0; j<vertexCount;j++) 
      { 
       matrix[i][j]=0; 
       wage[i][j]=0; 

      } 

     } 

     // fill matrix by 1 

     for(int i=0; i<edgeCount; i++) 
     { 
      file >> vertexF >> vertexE >> wag; 
      this->matrix[vertexF][vertexE]=1; 
      this->wage[vertexF][vertexE]=wag; 

     }  
     file.close(); 
     return true; 
    } 

    return false; 
} 

конечно печать работает в смежности классе А теперь я хочу, чтобы это значение в класс Дейкстра

//Dijkstra.cpp  
#include "Dijkstra.h" 
AdjacencyMatrix am; 

bool Dijkstra::makeDijkstraAlgo() {  
    int vertexCount=am.getVertexCount();  
    int vertexFirst=am.getVertexFirst(); 
    int **wage=am.getWage();  
    cout << vertexCount;  
    cout << vertexFirst; 
.......... } 

это мой основной класс

#include <iostream> 
#include "Dijkstra.h" 
#include "Screen.h" 
using namespace std; 

int main() { 
    AdjacencyMatrix am; 
    Dijkstra dijkstra; 

    am.createFromFile("matrix.txt"); 
    dijkstra.makeDijkstraAlgo(); 
    dijkstra.viewDijkstra(); 
    return 0; 
} 

и это сообщение cout показывает только 0, но в AdjacencyMatrix отображается нормальное значение. Вы можете мне помочь ?

UPDATE

я замечаю, что всегда будет 0, потому что я инициализируется значение в конструкторе .... Так как сделать что-то вроде этого

создать матрицу из файла и добавить значение vertexCount и т.д.

am.createFromFile("matrix.txt"); 

теперь я хочу, чтобы получить это значение (vertexCount и т.д.) из матрицы смежности класса Dijkstry класса и сделать

dijkstra.makeDijkstraAlgo(); 
dijkstra.viewDijkstra(); 

Как его решить?

+0

Почему вы ожидаете' cout' напечатать что-то еще? 'vertexCount' инициализируется до 0 и' cout' печатает только это –

+0

Можем ли мы получить больше кода? Убедитесь, что вы правильно инициализируете значения, потому что из вашего кода здесь '0' на самом деле будет ожидаемым результатом – meneldal

+0

@LahiruChandima у вас есть право. Потому что я инициализирую нулевое значение в моем конструкторе, поэтому каждый вызов будет 0. Но как его разрезать? Просто удалите его? –

ответ

1

Вы создаете одну матрицу, но используете другую.

makeDijkstraAlgo использует глобальную матрицу под названием «am», но main имеет свою собственную матрицу под тем же именем.

Избавьтесь от глобального и передать матрицу main «s функции

bool Dijkstra::makeDijkstraAlgo(const AdjacencyMatrix& am) {  
    int vertexCount=am.getVertexCount();  
    int vertexFirst=am.getVertexFirst(); 
    int **wage=am.getWage();  
    cout << vertexCount;  
    cout << vertexFirst; 
    // ... 
} 

int main() { 
    AdjacencyMatrix am; 
    Dijkstra dijkstra; 

    am.createFromFile("matrix.txt"); 
    dijkstra.makeDijkstraAlgo(am); 
    dijkstra.viewDijkstra(); 
    return 0; 
} 
+0

Да, у вас есть право. В следующий раз я буду больше думать;) Большое вам спасибо;) –

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