Ongeldige conversie van ‘char’ naar ‘const char *’

Ik heb problemen met het laden van een char in een van mijn functies. Dit is de broncode waarmee ik begon.

main.cpp

#include <IOF\IOF.h>
int main()
{
char load;
string intro = LoadFileToString( "Intro.txt" );
cout << intro << "> ";
cin >> load;
string loadedFile = LoadFileToString( load );
cout << loadedFile;
cin.get();
cin.ignore();
return 0;
}

IOF.h

#ifndef IOF_H
#define IOF_H
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string LoadFileToString( const char * filePath )
{
string fileData;
ifstream loadFile( filePath, ios::in );
if ( loadFile.is_open() )
{
    string line;
    while ( getline( loadFile, line ) )
    {
        fileData += line + "\n";
    }
    loadFile.close();
}
return fileData;
}
#endif

En dit is wat mijn compiler me vertelt.(Ik gebruik MinGW)

H:\Programming\Dropbox\C++\Basic Text Editor\main.cpp: In function 'int main()':
H:\Programming\Dropbox\C++\Basic Text Editor\main.cpp:13:45: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
string loadedFile = LoadFileToString( load );
                                         ^
In file included from H:\Programming\Dropbox\C++\Basic Text Editor\main.cpp:1:0:
H:\Programming\pocketcpp\MinGW\include/IOF\IOF.h:10:8: error:   initializing argument 1 of 'std::string LoadFileToString(const char*)' [-fpermissive]
string LoadFileToString( const char * filePath )

Ik heb geprobeerd te verwijzen naar load, het compileert prima, maar wanneer ik het programma start en een tekstbestand probeer te laden, crasht het. Ik heb ook geprobeerd er een cast aan toe te voegen

string loadedFile = LoadFileToString( ( const char * ) load );

maar dat gaf me deze fout:

H:\Programming\Dropbox\C++\Basic Text Editor\main.cpp: In function 'int main()':
H:\Programming\Dropbox\C++\Basic Text Editor\main.cpp:13:57: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
  string loadedFile = LoadFileToString( ( const char * ) load );

Ik heb oorspronkelijk de IOF-header gemaakt, zodat ik een snelle en gemakkelijke manier zou hebben om tekst uit een bestand te ontvangen, maar moet ik alle ifstream-dingen handmatig doen voor dit onderdeel? Of is er een oplossing?


Antwoord 1, autoriteit 100%

char load;
string intro = LoadFileToString( "Intro.txt" );
cout << intro << "> ";
cin >> load;
string loadedFile = LoadFileToString( load );

Je probeert een chardoor te geven aan LoadFileToStringdie een char*inneemt. Ik denk dat je dit van plan bent

string intro = LoadFileToString( "Intro.txt" );    
cout << intro << "> ";
string load;
cin >> load;    
string loadedFile = LoadFileToString( load.c_str() );

Merk op dat ik de invoer lees in een stringin plaats van een charomdat de LoadFileToStringeen (C-stijl) string verwacht worden doorgegeven; in plaats daarvan lees je en probeer je er een karakter aan door te geven. Zodra de invoer door een stringis gelezen, kan een C-stijl string worden verkregen door de functie string::c_str()aan te roepen.


Antwoord 2, autoriteit 60%

Probeer de compiler nooit te muilkorven. Die waarschuwingen zijn van onschatbare waarde. Uiteraard wil je een std::stringin plaats van een char, waar je load definieert.

je krijgt de const char*van een std::stringdoor c_str()aan te roepen.

Er is echter geen reden waarom uw functie LoadFileToString()niet in plaats daarvan een const std::string&zou moeten aannemen.


Antwoord 3, autoriteit 20%

De foutmelding is duidelijk genoeg.

De functie gedeclareerd als

string LoadFileToString( const char * filePath );

dat is de parameter heeft het type const char *

Je probeert de functie aan te roepen die variabele load als argument doorgeeft

string loadedFile = LoadFileToString( load );

De variabele belasting wordt echter gedeclareerd als type char

char load;

Er is dus een niet-overeenkomend type.

Je zou bijvoorbeeld kunnen schrijven

string loadedFile = LoadFileToString( &load );

Maar in dit geval zou de code ook ongeldig zijn omdat de aanwijzer verwezen naar de niet-nul-beëindigende reeks die het gedrag van het programma is niet gedefinieerd.

Other episodes