繁体   English   中英

从'char'到'const char *'的无效转换

[英]Invalid conversion from 'char' to 'const char *'

我在将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的工作? 还是有解决方法?

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

请注意,由于LoadFileToString希望传入(C样式)字符串,因此我将输入读取为string而不是char 相反,您正在阅读并尝试将字符传递给它。 通过string读取输入后,可以通过调用string::c_str()函数获得C样式的字符串。

切勿试图套用编译器。 这些警告是无价的。 显然,您要使用std::string而不是char定义负载。

您可以通过调用c_str()std::string获得const char*

不过,没有理由让您的LoadFileToString()函数不应该采用const std::string&

错误消息很清楚。

该函数声明为

string LoadFileToString( const char * filePath );

那是它的参数类型为const char *

您正在尝试调用传递变量load作为参数的函数

string loadedFile = LoadFileToString( load );

但是,变量load被声明为char类型

char load;

因此存在类型不匹配。

你可以例如写

string loadedFile = LoadFileToString( &load );

但是在这种情况下,代码也将无效,因为指针指向的是非零结尾的字符串,即程序的行为是不确定的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM