Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Probleme beim Compileren unter g++3.3

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.07.2003, 16:23 Uhr
~mathabu
Gast


Hallo
Kann jemand mir helfen,woher diese Fehlermeldung kommt, unter g++ 2.9 ohne Probleme, aber seit ich g++3.3 installiere, funzt das nicht mehr. !!


au_laden.cpp: In member function `int au_laden::get_header(char*)':
au_laden.cpp:20: no matching function for call to `std::basic_ifstream<char,
std::char_traits<char> >::read(au_header*&, int)'
/usr/include/c++/3.2/bits/istream.tcc:778: candidates are:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::read(_CharT*, int) [with _CharT = char, _Traits =
std::char_traits<char>]
au_laden.cpp: In member function `void
au_laden::write_vokalinfo_2_aufile(char*, char)':
au_laden.cpp:183: no matching function for call to `std::basic_ofstream<char,
std::char_traits<char> >::write(au_header*&, int&'



Ich habe fstream includiert und ifstream ifg(......) usw. initialisiert


Gruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.07.2003, 16:31 Uhr
~0xdeadbeef
Gast


Zeig mal den Sourcecode her. Nur mit den Fehlermeldungen können wir reichlich wenig anfangen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.07.2003, 16:40 Uhr
~mathabu
Gast



C++:
#include <iostream.h>
// #include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <netinet/in.h>
#include "au_laden.h"

using namespace std;

int au_laden::get_header(char *path_of_file){

  ifstream instreamobjekt(path_of_file,ios::in|ios::binary);

  if(!instreamobjekt){
    cerr << "Fehler beim lesen der datei !\n";
    exit(1);
  }
  header=new au_header[1];
  instreamobjekt.seekg(0,ios::beg);
  instreamobjekt.read(header,25);

  int hs=header->header_size;
  char vokal;

//cout << "headersize =" << hs << endl;    

  if(hs==24)
    header->vokal_info=0;
     else if(hs==25)
     {
        vokal = header->vokal_info;
            //cout << "das ist ein: " << vokal << endl;
        switch(vokal){
            case 'a':vokalwert=  0.0;break;
            case 'o':vokalwert=  1.0;break;
            case 'u':vokalwert=  2.0;break;
            case 'e':vokalwert=  3.0;break;
            case 'i':vokalwert=  4.0;break;
        }
    }
  else{
    char *info_string;
    info_string= new char[hs];
    instreamobjekt.seekg(0,ios::beg);
    instreamobjekt.read(info_string,hs);
    //for(int i=24;i<(hs);i++)
      //cout << info_string[i];

        vokal = info_string[24];
            //cout << "das ist ein: " << vokal << endl;
        switch(vokal){
            case 'a':vokalwert=  0.0;break;
            case 'o':vokalwert=  1.0;break;
            case 'u':vokalwert=  2.0;break;
            case 'e':vokalwert=  3.0;break;
            case 'i':vokalwert=  4.0;break;
        }
    //cout << "..." << endl;
    //cout << "vokalwert ="<<vokalwert<< endl;
  }


  return 0;
}

int au_laden::read_audio(char *path_of_file){

  ifstream instreamobjekt(path_of_file,ios::in|ios::binary);

  if(!instreamobjekt){
    cerr << "fehler beim lesen der datei!\n";
    exit(1);
  }
  int hs=header->header_size;
  int ad=header->audio_data_size;

  raw_audio_daten = new char[ad];
  
  instreamobjekt.seekg(hs,ios::beg);
  instreamobjekt.read(raw_audio_daten,ad);
  
  return 0;
}

// mach den headder-check ******************************************************  

int au_laden::make_header_check(){
  
  // magic number check
    cout << "header->magic_number =" << endl;
  long mn;
  mn=ntohl(header->magic_number);
  cout << mn << endl;

cout << "header->magic_number =" << header->magic_number << endl;

if (!((mn == 0x2E736E64) || (mn==0x2E736400))){
//if (!((header->magic_number == 0x2E736E64) || (header->magic_number == 0x2E736400))){
    cerr << "das ist keine au_datei!\n";
    exit(1);
  }
  
  mn=ntohl(header->codec);
  cout << mn << endl;
  // codec check
  //if (header->codec != 1){
   if (mn != 1){
     cerr << "fehler: .au-datei ist nicht mu-law codiert! \n";
    exit(1);
  }
  mn=ntohl(header->samplerate);
  cout << mn << endl;
  if (mn!= 11025){
  //if (header->samplerate != 11025){
    cerr << "fehler: samplerate der .au-datei !=11025Hz \n";
    exit(1);
  }
   mn=ntohl(header->channels);
  cout << mn << endl;
  // channel check
  if (mn != 1){
//  if (header->channels != 1){
    cerr << "fehler: .au_datei ist nicht mono !\n";
    exit(1);
  }
  
  return 0;
  
}


// cutting_raw_audio schneidet die relevanten audiodaten aus dem geoeffneten file,
// ab der halben maximal-amplitude


int au_laden::get_index_max_halbe(){
  
  int index;
  char max = 0;
  int ads=header->audio_data_size;
  
  for (int i=0; i<ads; i++){
    if (max < raw_audio_daten[i])
      max = raw_audio_daten[i];
  }
  for (int j=0; j<ads; j++){
    if (max/2 <= raw_audio_daten[j]){
      index = j;
      break;
    }
  }  
  return index;    
}

int au_laden::cut_raw_audio(){
  
  int index_max_halbe;
  
  index_max_halbe= get_index_max_halbe();
  
  shorted_raw_audio = new char[8192];
  for(int i=0;i<8192;i++)
    shorted_raw_audio[i]= raw_audio_daten[i+index_max_halbe];
  
  return 0;
}  
char* au_laden::aufile_laden(char *path_of_file){
  
  get_header(path_of_file);
  make_header_check();
  read_audio(path_of_file);
  cut_raw_audio();
  
  return shorted_raw_audio;
}


// write_vokalinfo_2_aufile() schreibt die vokal-information: a,e,i,o,u in das audiofile
void au_laden::write_vokalinfo_2_aufile(char* path_of_file,char vokal){


  if(header->header_size == 25){
    cout << "\nwrite_vokalinfo_2_aufile() abgebrochen: eine vokalinformation ist bereits im header enthalten\n" << endl;
    exit(1);
  }
  
  ofstream outstreamobjekt(path_of_file,ios::out|ios::binary);
  if(!outstreamobjekt){
    cerr << "fehler beim schreiben der datei!\n";
    exit(1);
  }

  int hs=25;
  header->header_size=25;
  header->vokal_info=vokal;

  int ad=header->audio_data_size;

  outstreamobjekt.write(header,hs);
  outstreamobjekt.write(raw_audio_daten,ad);

}    



int main(void){
  
  au_laden a;
  char* audio_array;
  audio_array = a.aufile_laden("sound006.au");
  //for (int i=0;i<200; i++)
   //   cout << audio_array[i] ;
  cout << " feddisch!!! \n";  

  return 0;
}


Dieser Post wurde am 07.07.2003 um 19:07 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.07.2003, 17:03 Uhr
~0xdeadbeef
Gast


Der gcc 3.3 setzt den Standard konsequenter durch, deswegen wird der au_header* nicht mehr implizit nach void* gecastet. Du musst ihm das an den entsprechenden Stellen explizit davorschreiben:

C++:
//Zeile 20:
instreamobjekt.read(dynamic_cast<void*>(header), 25);

//Zeile 183:
outstreamobjekt.write(dynamic_cast<void*>(header), hs);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.07.2003, 07:29 Uhr
virtual
Sexiest Bit alive
(Operator)


@beefy
Oh no. Lies dir bitte noch mal den Abschnitt zum Thema dynamic_cast durch (Der geht ausserdem aus bestimmten Gründen auch nur mit Klassen, die virtuelle Methodentabellen haben). static_cast wäre die richtige wahl.
Und ich meine - wie in einem anderen Thread erwähnt - nach wie vor, daß man nach char* casten muß, weil Streams eben nur ein read haben, das als ersten Parameter ein char* hat.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 09.07.2003 um 07:34 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.07.2003, 16:51 Uhr
~mathabu
Gast


Ja, Ich funzt leider nicht !
error:
$ g++ -o auladen au_laden.cpp
au_laden.cpp: In member function `int au_laden::get_header(char*)':
au_laden.cpp:21: error: cannot dynamic_cast `this->au_laden::header' (of t
struct au_header*') to type `void*' (source type is not polymorphic)
au_laden.cpp: In member function `void
au_laden::write_vokalinfo_2_aufile(char*, char)':
au_laden.cpp:196: error: cannot dynamic_cast `this->au_laden::header' (of
`struct au_header*') to type `void*' (source type is not polymorphic)

Habt Ihr eine gute Seite ueber g++ 3.3 bugs oder news...


gruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.07.2003, 17:02 Uhr
ao

(Operator)


Hast du schon mal

C++:
instreamobjekt.read((char *) header,25);


versucht?

Und woher stammt die 25? Hast du die selber ausgezählt? Solltest du lieber mit sizeof (*header) machen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.07.2003, 17:03 Uhr
virtual
Sexiest Bit alive
(Operator)


Also das ist kein gcc Bug.
Der Fehler in Zeilen 21/196 kommt aus dem Grund, den ich im letzten Post beschrieben habe.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.07.2003, 17:07 Uhr
~mathabu
Gast


ja, aber mit static_cast geht auchn nicht !

error:


$ g++ -o auladen au_laden.cpp
au_laden.cpp: In member function `int au_laden::get_header(char*)':
au_laden.cpp:21: error: invalid conversion from `void*' to `char*'
au_laden.cpp:21: error: initializing argument 1 of `
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::read(_CharT*, int) [with _CharT = char, _Traits =
std::char_traits<char>]'
au_laden.cpp: In member function `void
au_laden::write_vokalinfo_2_aufile(char*, char)':
au_laden.cpp:196: error: invalid conversion from `void*' to `const char*'
au_laden.cpp:196: error: initializing argument 1 of `
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::write(const _CharT*, int) [with _CharT = char, _Traits =
std::char_traits<char>]'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.07.2003, 17:15 Uhr
~0xdeadbeef
Gast


virtual hat natürlich recht, nimm static_cast<char*>(header).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: