www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/12/18/05:21:23

X-Authentication-Warning: delorie.com: mailnull set sender to djgpp-bounces using -f
Message-ID: <3C1F06BF.1C600376@earthlink.net>
From: Martin Ambuhl <mambuhl AT earthlink DOT net>
Organization: Nocturnal Aviation
X-Mailer: Mozilla 4.77 [en] (Win95; U)
X-Accept-Language: en,de-CH,fr,ru,zh-CN,ja
MIME-Version: 1.0
Newsgroups: comp.os.msdos.djgpp
Subject: Re: no matching function for call
References: <1008615695 DOT 246552 AT news>
Lines: 89
Date: Tue, 18 Dec 2001 09:04:59 GMT
NNTP-Posting-Host: 165.247.31.18
X-Complaints-To: abuse AT earthlink DOT net
X-Trace: newsread1.prod.itd.earthlink.net 1008666299 165.247.31.18 (Tue, 18 Dec 2001 01:04:59 PST)
NNTP-Posting-Date: Tue, 18 Dec 2001 01:04:59 PST
X-Received-Date: Tue, 18 Dec 2001 01:05:00 PST (newsmaster1.prod.itd.earthlink.net)
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

CPPNewbie wrote:
> 
>   Hi,
> 
>   I was testing code that I was able to run using VC++6 without a hitch, but djgpp is giving me the compile time error:
> 
>  no matching function for call to
> `std::basic_ofstream<char, std::char_traits<char> >::write(unsigned char*&, unsigned int)'
> c:/djgpp/lang/cxx-v3/bits/ostream.tcc:
> 
>  because I try to read data from and write to files using
> 
> ofstream's  .write((unsigned char*) &ut, sizeof(unsigned char))
> 
>  and
> 
>  unsigned char* ucAr = new unsigned char[ASCIIVOL];
>  ifBinStrm.read((unsigned char*) ucAr, ASCIIVOL);
> 
>  Is there a way to make the compiler/linker swallow these kinds of C-like code and keep going?
> 
>  My question would be then. How do you read/write a number of raw bytes from/to a file?

Below are the changes I made to your code to make it compilable
without diagnostics, followed by the resulting code.

[Changes]

  1c1,3
  < #include <fstream.h>
  ---
  > #include <fstream>
  > #include <iostream>
  > using namespace std;
  8c10
  <     unsigned int ut, utStrt = 0, utTp = ASCIIVOL;
  ---
  >     unsigned int ut, utTp = ASCIIVOL;
  14c16
  <             ofBinStrm.write((unsigned char *) &ut, sizeof(unsigned
char));
  ---
  >         ofBinStrm.write((char *) &ut, 1);
  25c27
  <     ifBinStrm.read((unsigned char *) ucAr, ASCIIVOL);
  ---
  >     ifBinStrm.read((char *) ucAr, ASCIIVOL);

[Resulting code]

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

// __ Constant
const unsigned int ASCIIVOL = 256;

int main(void)
{
    unsigned int ut, utTp = ASCIIVOL;

// __ writing byte size binary data
    ofstream ofBinStrm;
    ofBinStrm.open("TmpFl.bin.", ios::out | ios::binary);
    for (ut = 0; (ut < utTp); ++ut) {
        ofBinStrm.write((char *) &ut, 1);
    }
    cerr << " ofBinStrm.tellp()=" << ofBinStrm.tellp() << endl;
    ofBinStrm.close();

// __ Opening file as ifstream
    ifstream ifBinStrm;
    ifBinStrm.open("TmpFl.bin.", ios::in | ios::binary);

// __ Dumping file at once on the array
    unsigned char *ucAr = new unsigned char[ASCIIVOL];
    ifBinStrm.read((char *) ucAr, ASCIIVOL);
    cerr << " ifBinStrm.tellg()=" << ifBinStrm.tellg() << endl;
    ifBinStrm.close();

// __ printing array
    for (ut = 0; (ut < utTp); ++ut) {
        cerr << ut << "," << (unsigned int) ucAr[ut] << ", ucAr[" << ut
            << "]=" << ucAr[ut] << endl;
    }
    delete[]ucAr;
// __
    return (0);
}                               // main

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019