2015-04-25 3 views
0

моего .h файлдобавить значения из файла в два раз указателя

#ifndef ADJACENCYMATRIX_H_ 
#define ADJACENCYMATRIX_H_ 
#include <iostream> 
#include <fstream> 
#include <cstring> 
#include <cstdio> 
#include <cstdlib> 
using namespace std; 



class AdjacencyMatrix{ 

private: 
    int vertexCount; 
    int vertexFirst; 
    int edgeCount; 
    int **wage; 
    int **matrix; 

public: 
    AdjacencyMatrix(); 
    virtual ~AdjacencyMatrix(); 
    bool createFromFile(string path); 
    void viewMatrix(); 



}; 

#endif /* ADJACENCYMATRIX_H_ */ 

Я прочитал файл формы, и я хочу, чтобы записать его в мою инициализированную матрицу, но он не работает. Вы можете мне помочь ?

#include "AdjacencyMatrix.h" 

AdjacencyMatrix::AdjacencyMatrix() { 
    this->vertexCount=0; 
    this->vertexFirst=-1; 
    this->edgeCount=0;  
} 

AdjacencyMatrix::~AdjacencyMatrix() { } 

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

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

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

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

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

     // fill matrix by 1 
     for(int i=0; i<edgeCount; i++) 
     { 
      file >> vertexF >> vertexE >> wag; 
      cout << " w " << wag; 
      matrix[vertexF][vertexE] = 1; 
     } 

     file.close(); 
     return true; 
    } 
    cout << "File does not opened" << endl; 
    return false; 
} 

void AdjacencyMatrix::viewMatrix(){ 
    cout << " Adjacency Matrix "; 
    for(int i=0; i<vertexCount; i++) 
    { 
      for(int j=0; i<edgeCount;i++) { 
       cout << this->matrix[i][j] << " "; 
      } 
      cout<< endl; 
    } 
} 

и эта часть не работает (я имею в виду, что ничто не является проявлением и showMatrix() не работает). Я хочу получить значение из файла, а затем записать его как matrix[x][y] = 1, потому что я хочу создать путь к графу.

for(int i=0; i<edgeCount; i++) 
{ 
    file >> vertexF >> vertexE >> wag; // cout work in this line 
    matrix[vertexF][vertexE] = 1; // does not work 
} 
+0

Не могли бы вы добавить AdjacencyMatrix.h в вопрос? Трудно ответить на вопрос, не видя объявления класса. – phantom

+0

Отправьте сообщение [MCVE] (http://www.stackoverflow.com/help/mcve). Что значит «не работает»? – Barry

ответ

1

Размер вашей матрицы неправильно:

matrix = new int *[edgeCount]; // wrong size 
wage = new int *[edgeCount]; // wrong size 

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

При определении матрицы следует использовать vertexCount вместо этого, как это:

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

Это может привести к ошибкам сегментации или странное поведение.

Кроме того, когда вы читаете данные, предоставленные пользователем, вы должны проверить их:

file >> vertexF >> vertexE >> wag; 
matrix[vertexF][vertexE] = 1; 

Вы уверены, что vertexF и vertexE не больше, чем vertexCount - 1 и edgeCount - 1?

+0

Хорошо спасибо;) –