1. ホーム
  2. c++

[解決済み] 'char' から 'const char *' への変換が無効です。

2022-01-29 23:27:54

質問

ある関数にcharを読み込むのに問題があります。これは、私が最初に作成したソースコードです。

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

そして、これは私のコンパイラが教えてくれたものです。(私は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 )

loadを参照してみたところ、コンパイルはうまくいきましたが、プログラムを実行してテキストファイルを読み込もうとすると、クラッシュしてしまいます。また、キャストを追加してみました

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

が、このようなエラーが発生しました。

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 );

もともとIOFヘッダを作ったのは、ファイルからテキストを受け取るための高速で簡単な方法を持つためですが、この部分はifstreamのものをすべて手動でやらなければならないのでしょうか?それとも、回避策はあるのでしょうか?

解決方法は?

char load;
string intro = LoadFileToString( "Intro.txt" );

cout << intro << "> ";

cin >> load;

string loadedFile = LoadFileToString( load );

を渡そうとしているのですね。 char から LoadFileToString を取り込むものです。 char* . あなたがやろうとしているのは、次のようなことだと思います。

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

入力を string ではなく char というのは LoadFileToString は(C言語スタイルの)文字列が渡されることを期待します。その代わりに、文字を読んで渡そうとしているのです。入力が string を呼び出すことで、C言語形式の文字列を得ることができます。 string::c_str() 関数を使用します。