2013-12-04 2 views
0

Вот кодПрограмма обыкновение компилировать

#include <iostream> 
#include <cstdlib> 
#include <fstream> 
using namespace std; 

class sudoku { 
    public: 
     void read(ifstream ifs); 
     void write(ofstream ofs); 

    private: 
     int puzzle[9][9]; 

}; 

void sudoku::read(ifstream ifs){ 
    int row; 
    int col; 
    int value; 
    int linenum = 1; 
    bool error = false; 

    while(ifs >> row){ 
     ifs >> col; 
     ifs >> value; 

     if(row < 0 || row > 8){ 
      cerr << "Incorrect Row Value: " << row << " Line Number: " << linenum; 
      error = true; 
     } 

     if(col < 0 || col > 8){ 
      error = true; 
      cerr << "Incorrect Col Value: " << col << " Line Number: " << linenum; 
     } 

     if(value < 1 || value > 9){ 
      error = true; 
      cerr << "Invalid Value: " << value << " Line Number: " << linenum; 
     } 

     if (! error) 
      puzzle[row][col] = value; 

     error = false; 
    } 
} 

void sudoku::write(ofstream ofs){ 

    for (int i = 0; i < 9; i++){ 
     for (int j = 0; j < 0; j++){ 

      if(puzzle[i][j] != 0){ 
       ofs << i << ' ' << j << ' ' << puzzle[i][j] << endl; 
      } 

     } 

    } 

} 


int main(int argc, char* argv[]){ 

    sudoku sudopuzzle; 

    string filename = argv[1]; 

    int found = filename.find(".txt"); 
    if(found == filename.npos) { 
     cout << "No .txt extension" << endl; 
     return 0; 
    } 


    ifstream ifs; 
    ifs.open(filename.c_str()); 

    sudopuzzle.read(ifs); 

    ifs.close(); 

    filename.resize(filename.size()-4); 

    filename.append("_checked.txt"); 

    ofstream ofs; 
    ofs.open(filename.c_str()); 

    sudopuzzle.write(ofs); 
    ofs.close(); 

    return 0; 
} 

Эта программа должна читать сгенерированный головоломки. убедитесь, что он действителен и записывает его в другой файл. Обычно я хорошо разбираюсь в ошибках, но это беспорядок. Он выплескивает материал, ссылающийся на включение iostream и цитирует файлы, к которым я не имею никакого отношения. Im угадывая его некоторую ошибку, которая приходит с передачей fstreams к funcitons или что-то еще. любой ключ?

ответ

1

Вы должны передать ссылку на объекты потока: требуется

class sudoku { 
    public: 
     void read(ifstream &ifs); 
     void write(ofstream &ofs); 

    private: 
     int puzzle[9][9]; 

}; 

void sudoku::read(ifstream &ifs){ 
    // sudoku::read code here 
} 

void sudoku::write(ofstream &ofs){ 
    // sudoku::write code here 
} 

Это изменение, потому что оба ifstream и ofstream имеют конструктор =delete копирования. (Hat tip: @awesomeyi)

+0

Поскольку 'ifstream' и' ofstream' имеют конструктор копии '= deleted' – yizzlez

+0

У меня действительно есть один быстрый вопрос. Как я могу инициализировать свой 2d-массив нулями? –

+0

@ user2789171 Вы можете использовать вложенные петли 'for', или вы можете использовать' memset (puzzle, 0, sizeof (puzzle)); ' – godel9

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