2017-04-16 4 views
0

So versuche ich ein Programm zu erstellen, liest ein Zeichen aus einer Datei, speichert alles in einem Zeichen-Array und schreibt dann a neue Datei, außer dass die rohe Nummer jedes Charakters um eins erhöht wird (die erfahrensten Programmierer hier werden wissen, wovon ich rede). Also versuche ich grundsätzlich meinen eigenen Verschlüsselungsalgorithmus zu erstellen. Allerdings bekomme ich einen sehr seltsamen Fehler: <various paths here>\main.cpp|27|error: no match for 'operator<<' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'char')| Ich habe von diesem Fehler viel gehört, aber alles, was ich sehe, ist, dass es nur passiert, wenn Leute klassendefinierte Funktionen verwenden, was ich in meinem Programm nicht getan habe. Dieser Fehler kam auch mit einem Hinweis, dass ich glaube, die Leute finden könnte es nützlich, mir zu helfen: <various paths here>\main.cpp|27|note: no known conversion for argument 1 from 'std::ifstream {aka std::basic_ifstream<char>}' to 'int'| Der Quellcode ist die folgende:Versuchen, ein Zeichen in eine Datei schreiben mit fstream: keine Übereinstimmung für 'Operator <<'

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

int main() { 
    int array_size = 1024000; 
    char Str[array_size]; 
    int position = 0; 
    long double fsize = position; 

    ifstream finput("in.txt"); 
    ifstream foutput("out.txt"); 
    if(finput.is_open()) { 
     cout << "File Opened successfully. Storing file data into array." << endl; 
     while(!finput.eof() && position < array_size) { 
      finput.get(Str[position]); 
      position++; 
      fsize = position; 
      cout << "Processed data: " << fsize/1000 << "KB" << endl; 
     } 
     Str[position-1] = '\0'; 

     cout << "Storing done, encoding..." << endl << endl; 
     for(int i = 0; Str[i] != '\0'; i++) { 
      cout << Str[i] << "changed to " << char(Str[i] + 1) << endl; 
      foutput << Str[i] += 1; 
     } 

    } else { 
     cout << "File could not be opened. File must be named in.txt and must not be in use by another program." << endl; 
    } 
    return 0; 
} 

Anmerkung: Ich habe fstream zur Ausgabe von Strings worden (nicht Zeichen, behalte dies im Gedächtnis) auf eine Datei andere Zeiten, und es hat gut funktioniert!

Antwort

1

Sie erklärt haben ifstream foutput statt ofstream foutput (Sie haben es Ausgabestrom anstelle von Eingangsstrom zu erklären.

  1. ersetzen ifstream foutput("out.txt"); mit ofstream foutput("out.txt");
  2. Außerdem foutput << Str[i] += 1 zu foutput << (Str[i] += 1) ändern Fehler zu entfernen, weil der Betreiber Vorrang
  3. .
1
ifstream foutput("out.txt"); 

T Hut ist ein Eingang Stream, kein Ausgangsstrom. Ändern Sie es in std::ofstream, um einen Ausgabestream zu erhalten.


Sie werden dann hier einen weiteren Fehler:

foutput << Str[i] += 1; 

, dass aufgrund der Rangfolge der Operatoren ist. Fix es durch Einfügen von Klammern:

foutput << (Str[i] += 1); 
Verwandte Themen