Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyświetlanie tablicy dwuwymiarowej zadeklarowanej jako klasa

Ostatnio zmodyfikowano 2014-11-06 00:04
Autor Wiadomość
cynizm
Temat założony przez niniejszego użytkownika
Wyświetlanie tablicy dwuwymiarowej zadeklarowanej jako klasa
» 2014-11-05 22:11:34
witam, mam pewien problem. Tworze klasę której obiekty mają składać się z tablicy dwuwymiarowej oraz informacji o rozmiarze tablicy (tablica[n][n]), dane są wczytywane z pliku.

doszedłem do momentu gdy tablica wczytuje mi się z pliku, jednak nie mogę jej wyświetlić.

oto kod:

main.cpp
C/C++
#include "stdafx.h"
#include "Komiwojazer.h"




int _tmain( int argc, _TCHAR * argv[] )
{
   
    Komiwojazer kom;
    kom.wczytaj();
    kom.wyswietl_macierz();
    getchar();
    return 0;
}


header klasy komiwojarzer
C/C++
#pragma once

class Komiwojazer
{
public:
    int rozmiar;
    int ** macierz;
   
   
public:
    Komiwojazer( void );
    ~Komiwojazer( void );
    bool wczytaj();
    void wyswietl_macierz();
   
};


plik cpp klasy
C/C++
#include "stdafx.h"
#include "Komiwojazer.h"
#include <fstream>
#include <iostream>


using namespace std;

bool Komiwojazer::wczytaj()
{
   
    int rozmiar;
    ifstream plik;
    plik.open( "plik.txt", ios::in );
   
   
    if( !plik.good() )
    {
        return false;
    }
    else
    {
       
        plik >> rozmiar;
       
        macierz = new int *[ rozmiar ];
        for( int i = 0; i < rozmiar; ++i )
        {
            macierz[ i ] = new int[ rozmiar ];
        }
        int znak;
        while( !plik.eof() )
        {
            for( int j = 0; j < rozmiar; j++ )
            {
                for( int i = 0; i < rozmiar; i++ )
                {
                   
                    plik >> znak;
                    macierz[ i ][ j ] = znak;
                }
            }
        }
        cout << rozmiar;
        plik.close();
        wyswietl_macierz();
        return true;
       
       
    }
}



void Komiwojazer::wyswietl_macierz()
{
    for( int i = 0; i < rozmiar; i++ )
    {
        for( int j = 0; j < rozmiar; j++ )
        {
            cout << macierz[ i ][ j ];
        }
        cout << endl;
    }
}


Komiwojazer::Komiwojazer( void )
{
}



Komiwojazer::~Komiwojazer( void )
{
}


jakiś pomysł co robię źle?

P-120063
Monika90
» 2014-11-05 23:46:09
W funkcji wczytaj wczytujesz rozmiar do zmiennej lokalnej, a składowa rozmiar pozostaje niezainicjalizowana. I
while( !plik.eof() ) { }
 - nie wiem po co ta pętla.
P-120067
cynizm
Temat założony przez niniejszego użytkownika
» 2014-11-05 23:58:32
faktycznie ta pętla nie jest potrzebna, po usunięciu nadal nie dziala wyswietlanie.
niezainicjalizowana w sensie nie ma poczatkowej wartosci? czy ma to znaczenie skoro ostatecznie dostaje i tak wartosc przypisaną z pliku?

plik zawiera informacje o rozmiarze macierzy w pierwszej linijce i w nastepnych wartosci macierzy, np:
C/C++
5
- 1 4 3 5 6
4 - 1 7 8 1
3 7 - 1 9 5
5 8 9 - 1 3
6 1 5 3 - 1
P-120068
Monika90
» 2014-11-06 00:02:11
No właśnie nie dostaje wartości, int rozmiar; w funkcji wczytaj(), a int rozmiar; w klasie to dwie różne zmienne.
P-120069
cynizm
Temat założony przez niniejszego użytkownika
» 2014-11-06 00:04:44
ok dzieki za pomoc, działa teraz bez zarzutu :)
P-120070
« 1 »
  Strona 1 z 1