我試圖做一個程序,它能夠同時創建一個.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 '還不存在?
你能提一下怎麼做?我的參數有點不穩定。 – JbstormburstADV
'ifstream&inStream' – timrau
我在這裏添加了我要求的功能,對吧?另外,我使用的是主要的還是其他的? – JbstormburstADV