Hey guys,
I'm quite confused here. My program works perfectly when compiled on Visual Studio 2008 but it doesn't compile on G++.
I don't even understand the error. I know that the ifstream is part of the C++ standard library so it makes even less sense:
Here's my isbnprefix.cpp:isbnprefix.cpp: In function 'int registered(FILE*, int)':
isbnprefix.cpp:32: error: no matching function for call to 'std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(FILE*&)'
/usr/include/c++/4.1.2/fstream:442: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.1.2/fstream:428: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.1.2/iosfwd:89: note: std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)
isbnprefix.cpp: In function 'int minNoDigits(FILE*, int)':
isbnprefix.cpp:42: error: no matching function for call to 'std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(FILE*&)'
/usr/include/c++/4.1.2/fstream:442: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.1.2/fstream:428: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.1.2/iosfwd:89: note: std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)
isbnprefix.cpp: In function 'int registered(FILE*, int, int)':
isbnprefix.cpp:65: error: no matching function for call to 'std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(FILE*&)'
/usr/include/c++/4.1.2/fstream:442: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.1.2/fstream:428: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.1.2/iosfwd:89: note: std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)
and here's my stdheader.h:Code:/* isbnprefix.cpp * Assignment 1's ISBN prefix program file. * Copyright (C) 2009 Adrien Kwok. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 3 * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <[LINK REMOVED]>. * */ #include "stdheader.h" #include "prefix.h" void seekStart(FILE* fp) { fseek(fp, 0, SEEK_SET); } FILE* open(const char* filename){ FILE* fp = new FILE; fp = fopen (filename, "r"); return fp; } int registered(FILE* fp, int area){ seekStart(fp); ifstream in(fp); while (!in.eof()) { int area0, minPublisher, maxPublisher; in >> area0 >> minPublisher >> maxPublisher; if (area0 == area) return true; } return false; } int minNoDigits(FILE* fp, int area){ seekStart(fp); ifstream in(fp); while (!in.eof()) { // read one line int area0, minPublisher, maxPublisher; in >> area0 >> minPublisher >> maxPublisher; cout << maxPublisher; // determine the max number of digits if (area == area0) { if (maxPublisher <= 9) return 1; if (maxPublisher <= 99) return 2; if (maxPublisher <= 999) return 3; if (maxPublisher <= 9999) return 4; if (maxPublisher <= 99999) return 5; if (maxPublisher <= 999999) return 6; return 7; } } return 0; } int registered(FILE* fp, int area, int publisher){ seekStart(fp); ifstream in(fp); while (in) { int area0, minPublisher, maxPublisher; in >> area0 >> minPublisher >> maxPublisher; if (area0 == area) { if (minPublisher <= publisher && publisher <= maxPublisher) return true; } } return false; } int close (FILE* fp){ int err = fclose(fp); return err == 0 ? true : false; }
Thanks,Code:#include <iostream> #include <iomanip> #include <cstdlib> #include <cmath> #include <fstream> #include <cstring> #include <cctype> #include <sstream> #include <strstream> using namespace std;
deltatux