来自' char'的转换无效到#char; char *'

时间:2014-04-01 23:36:01

标签: c++ fstream

我无法将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 )

我尝试过引用加载,它编译得很好,但是当我运行程序并尝试加载文本文件时,它会崩溃。我也试过添加一个演员

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内容?或者有解决方法吗?

3 个答案:

答案 0 :(得分:5)

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读取输入,就可以通过调用string::c_str()函数获得C风格的字符串。

答案 1 :(得分:4)

永远不要试图阻止编译器。这些警告非常宝贵。显然,您需要一个std::string而不是char,您可以在其中定义负载。

您通过致电const char*std::string获得c_str()

但是,您LoadFileToString()函数不应该取代const std::string&

答案 2 :(得分:1)

错误信息足够清晰。

声明为

的函数
string LoadFileToString( const char * filePath );

该参数的类型为const char *

您正在尝试将函数传递给变量load作为参数

string loadedFile = LoadFileToString( load );

但是,变量load被声明为具有char

类型
char load;

因此存在类型不匹配。

你可以写一下

string loadedFile = LoadFileToString( &load );

但在这种情况下代码也是无效的,因为指针引用非零终止字符串,这是程序的行为将是未定义的。