2014-03-05 38 views
0

我試圖做一個程序,它能夠同時創建一個.txt文件並從中讀取它來創建針對Linux的tic-tac-toe的輸出。但是,我的一個函數並沒有初始化它的第一個參數,即來自所討論文件的輸入流,以便創建所需的輸出。C++:ifstream作爲參數

的函數原型:

void loadSquaresFromStream( ifstream inStream, char statusSquare[], int currGame, int 
row, int column, int mark, int player, int games_Left); 

// This function reads from the file 'games.txt' and uses it to update the array 
// used to output each game. 

功能頭部和身體:

void loadSquaresFromStream( ifstream inStream, char statusSquare[], int currGame, int 
row, int column, int mark, int player, int games_Left) { 
    while (currGame == 1) { 
    inStream >> row >> column; 
    if (row == 1 && column == 1 && statusSquare[1] == ' ') { 
     statusSquare[1] = mark; 
     player++; 
    } 
    else if (row == 1 && column == 2 && statusSquare[2] == ' ') { 
     statusSquare[2] = mark; 
     player++; 
    } 
    else if (row == 1 && column == 3 && statusSquare[3] == ' ') { 
     statusSquare[3] = mark; 
     player++; 

.... 
.... 
    else if (row == 0 && column == 0) { 
    currGame = 0; 
    } 
    else { 
     currGame = 0; 
     games_Left = 0; 
    } 
    } 
} 

,並在主功能區:

int main() { 
.... 
.... 
else if (option == '2') { //line 189 
    cout << " Checking for file 'games.txt' in current directory... " << endl; 
    inStream.open ("games.txt"); 
    if (inStream.fail()) { 
    cout << " ERROR: File 'games.txt' was not found. Please re-execute this program and play a game to create the file before using this feature. " << endl; 
    exit(1); 
    } 
    else { 
     cout << " File 'games.txt' found. Displaying output now. " << endl << endl; 
    } 
    system("cls"); 
    while (games_Left == 1) { 
     cout << "Board Positions for Game " << games << ": " << endl; 
     loadSquaresFromStream(inStream, statusSquare, currGame, row, column, mark, player, games_Left); //line 202 
.... 
.... 
} 

這是錯誤的語法我同時嘗試從cygwin和code :: blocks進行編譯。

In file included from /usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/ios:42:0, 
       from /usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/ostream:38, 
       from /usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/iostream:39, 
       from jebecker_assignment01.cpp:16: 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/bits/ios_base.h: In copy constructor ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’: 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/bits/ios_base.h:786:5: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private 
    ios_base(const ios_base&); 
    ^
In file included from /usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/ios:44:0, 
       from /usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/ostream:38, 
       from /usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/iostream:39, 
       from jebecker_assignment01.cpp:16: 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/bits/basic_ios.h:66:11: error: within this context 
    class basic_ios : public ios_base 
     ^
In file included from jebecker_assignment01.cpp:17:0: 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/fstream: In copy constructor ‘std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)’: 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/fstream:427:11: note: synthesized method ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’ first required here 
    class basic_ifstream : public basic_istream<_CharT, _Traits> 
     ^
In file included from /usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/ios:43:0, 
       from /usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/ostream:38, 
       from /usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/iostream:39, 
       from jebecker_assignment01.cpp:16: 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/streambuf: In copy constructor ‘std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)’: 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/streambuf:802:7: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]’ is private 
     basic_streambuf(const basic_streambuf& __sb) 
    ^
In file included from jebecker_assignment01.cpp:17:0: 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/fstream:72:11: error: within this context 
    class basic_filebuf : public basic_streambuf<_CharT, _Traits> 
     ^
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/fstream: In copy constructor ‘std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)’: 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/include/c++/fstream:427:11: note: synthesized method ‘std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)’ first required here 
    class basic_ifstream : public basic_istream<_CharT, _Traits> 
     ^
jebecker_assignment01.cpp: In function ‘int main()’: 
jebecker_assignment01.cpp:202:98: note: synthesized method ‘std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)’ first required here 
    loadSquaresFromStream(inStream, statusSquare, currGame, row, column, mark, player, games_Left); 
                           ^
jebecker_assignment01.cpp:31:6: error: initializing argument 1 of ‘void loadSquaresFromStream(std::ifstream, char*, int, int, int, int, int, int)’ 
void loadSquaresFromStream( ifstream inStream, char statusSquare[], int currGame, int row, int column, int mark, int player, int games_Left); 
    ^

任何人都可以弄清楚程序出了什麼問題嗎?

編輯:參照改變ifstream的一個電話後,我得到這個,當我試圖編譯:

/tmp/ccM1q9XN.o:jebecker_assignment01.cpp:(.text+0x416): undefined reference to `displayActiveBoard()' 
/tmp/ccM1q9XN.o:jebecker_assignment01.cpp:(.text+0xaf5): undefined reference to `checkActiveGameStatus()' 
/tmp/ccM1q9XN.o:jebecker_assignment01.cpp:(.text+0xb17): undefined reference to `displayActiveBoard()' 
/usr/lib/gcc/i686-pc-cygwin/4.8.2/../../../../i686-pc-cygwin/bin/ld: /tmp/ccM1q9XN.o: bad reloc address 0x0 in section `.ctors' 
collect2: error: ld returned 1 exit status 

這是關係到我如何寫我的其他功能,還是因爲「games.txt '還不存在?

回答

2

ifstream對象不能被複制。反而通過引用傳遞。

+0

你能提一下怎麼做?我的參數有點不穩定。 – JbstormburstADV

+1

'ifstream&inStream' – timrau

+0

我在這裏添加了我要求的功能,對吧?另外,我使用的是主要的還是其他的? – JbstormburstADV

2

您無法通過值ifstream:它不可複製。