CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3
  1. #1
    Join Date
    Feb 2009
    Posts
    1

    G++ Compilation Error Doesn't Make Sense

    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:

    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> >&)
    Here's my isbnprefix.cpp:
    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;
    }
    and here's my stdheader.h:
    Code:
    #include <iostream>
    #include <iomanip>
    #include <cstdlib>
    #include <cmath>
    #include <fstream>
    #include <cstring>
    #include <cctype>
    #include <sstream>
    #include <strstream>
    using namespace std;
    Thanks,
    deltatux

  2. #2
    Join Date
    Feb 2002
    Posts
    4,640

    Re: G++ Compilation Error Doesn't Make Sense

    Well, there is no such constructor to 'ifstream' that takes a FILE *. See the MSDN entry.

    Viggy

  3. #3
    Join Date
    Oct 2006
    Location
    Sweden
    Posts
    3,654

    Re: G++ Compilation Error Doesn't Make Sense

    Having a using namespace statement in a header is big no-no...
    Debugging is twice as hard as writing the code in the first place.
    Therefore, if you write the code as cleverly as possible, you are, by
    definition, not smart enough to debug it.
    - Brian W. Kernighan

    To enhance your chance's of getting an answer be sure to read
    http://www.codeguru.com/forum/announ...nouncementid=6
    and http://www.codeguru.com/forum/showthread.php?t=366302 before posting

    Refresh your memory on formatting tags here
    http://www.codeguru.com/forum/misc.php?do=bbcode

    Get your free MS compiler here
    https://visualstudio.microsoft.com/vs

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured