【问题标题】:How to convert const *char to std::string [closed]如何将 const *char 转换为 std::string [关闭]
【发布时间】:2016-09-12 22:06:59
【问题描述】:

我收到这些错误是因为我无法正确地将 const char* 转换为 std::string....

在 ./../Header Files/MainGame.h:5:0 包含的文件中, 来自./MainGame.cpp:2, 来自 main.cpp:1: ./../Header Files/../Source Files/Hangman.cpp: 在成员函数‘void Hangman::checkIfItEquals(std::string)’: ./../Header Files/../Source 文件/Hangman.cpp:55:41:错误:从“char”到的无效转换 ‘const char*’ [-fpermissive] std::string charStr = string(it) ^ 在 /usr/include/c++/4.8/string:52:0 包含的文件中, 来自 /usr/include/c++/4.8/bits/locale_classes.h:40, 来自 /usr/include/c++/4.8/bits/ios_base.h:41, 来自/usr/include/c++/4.8/ios:42, 来自 /usr/include/c++/4.8/ostream:38, 来自 /usr/include/c++/4.8/iostream:39, 来自 ./../Header Files/MainGame.h:2, 来自./MainGame.cpp:2, 从 main.cpp:1: /usr/include/c++/4.8/bits/basic_string.h:490:7: 错误:初始化 ‘std::basic_string<_chart _traits _alloc>::basic_string(const _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits; _分配= std::allocator]’ [-fpermissive] basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()); ^ 在 ./../Header Files/MainGame.h:5:0 中包含的文件中, 来自./MainGame.cpp:2, 来自 main.cpp:1: ./../Header Files/../Source Files/Hangman.cpp:56:9: error: 预期的 ‘,’ 或 ‘;’ 在 ‘if’ 之前 if(guessLet.compare(charStr) == 0) ^

这是代码......如果其他代码与问题有任何关系,我将全部提供......

Hangman.cpp:

#include<vector>
#include "../Header Files/Hangman.h"

Hangman::Hangman()
{
}

void Hangman::run()
{
    this -> mainGame();
    this -> mainGameLoop();
}


void Hangman::mainGame()
{
    dictonary.init();
    randomString = dictonary.randomItem();
    cout << "RANDOM STRING : " << randomString << endl;
    stringToVec();
}

void Hangman::stringToVec()
{
    for(std::string::iterator it = randomString.begin(); it != randomString.end(); ++it) 
    {
        randStringVec.push_back(*it);
    }
}


void Hangman::mainGameLoop()
{
    try{
         cout << " \n Guess A Letter (MUST BE A LETTER OR EXIT) \n";
         std::cin >> userGuessLetter;
         if(userGuessLetter.length() > 1)
             throw "Too Big Of a letter";
    } 
    catch(const char* exc)
    {
       if(true)
       {
          exit(1);
       }
    }

    cout << "You typed " << userGuessLetter << endl;
}

void Hangman::checkIfItEquals(string guessLet)
{
    for(std::vector<char>::iterator it = randStringVec.begin(); it!=randStringVec.end(); it++)
    {
        std::string charStr = string(*it)
        if(guessLet.compare(charStr) == 0)
        {
            cout << "GOOD JOB.. THERE IS A SIMMILAR LETTER!" << endl;
            break;
        }
    }
}


Hangman::~Hangman()
{
}

Hangman.h:

#pragma once
#include<iostream>
#include<string>
#include<vector>
#include "../Source Files/Drawer.cpp"
#include "../Source Files/Dictonary.cpp"

using std::cout;
using std::endl;
using std::string;


class Hangman
{
public:

    Hangman();
    ~Hangman();
    void run();
private:
    Drawer hgmnDraw;
    Dictonary dictonary;
    std::vector<char> randStringVec;
    string randomString;
    string userGuessLetter;
    void mainGame();
    void drawHangMan(int attempts, int mode);
    void checkIfItEquals(string guessLet);
    void stringToVec();
    void mainGameLoop();
    int attemptsMadeBad = 0, attemptsMadeGood = 0;
    bool correctGs;
};

编辑

在 BenjaminLindley 评论下面的问题后,我进行了编辑.. 并消除了一个错误,但仍然存在 2 个相同的错误:

在 ./../Header Files/MainGame.h:5:0 包含的文件中, 来自./MainGame.cpp:2, 来自 main.cpp:1: ./../Header Files/../Source Files/Hangman.cpp: 在成员函数‘void Hangman::checkIfItEquals(std::string)’: ./../Header Files/../Source 文件/Hangman.cpp:55:41:错误:从“char”到的无效转换 ‘const char*’ [-fpermissive] std::string charStr = string(it); ^ 在 /usr/include/c++/4.8/string:52:0 包含的文件中, 来自 /usr/include/c++/4.8/bits/locale_classes.h:40, 来自 /usr/include/c++/4.8/bits/ios_base.h:41, 来自/usr/include/c++/4.8/ios:42, 来自 /usr/include/c++/4.8/ostream:38, 来自 /usr/include/c++/4.8/iostream:39, 来自 ./../Header Files/MainGame.h:2, 来自./MainGame.cpp:2, 从 main.cpp:1: /usr/include/c++/4.8/bits/basic_string.h:490:7: 错误:初始化 ‘std::basic_string<_chart _traits _alloc>::basic_string(const _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits; _分配= std::allocator]’ [-fpermissive] basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());

另一个编辑

基本上我没有正确地将 char const* 转换为字符串:

for(std::vector<char>::iterator it = randStringVec.begin(); it!=randStringVec.end(); it++)
    {
        std::string charStr = string(*it);
        if(guessLet.compare(charStr) == 0)
        {
            cout << "GOOD JOB.. THERE IS A SIMMILAR LETTER!" << endl;
            break;
        }
    }

正如您在第二行看到的那样,我正在进行类型转换,但根据此错误无法正常工作:

In file included from ./../Header Files/MainGame.h:5:0,
                 from ./MainGame.cpp:2,
                 from main.cpp:1:
./../Header Files/../Source Files/Hangman.cpp: In member function ‘void Hangman::checkIfItEquals(std::string)’:
./../Header Files/../Source Files/Hangman.cpp:55:41: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]
         std::string charStr = string(*it);
                                         ^
In file included from /usr/include/c++/4.8/string:52:0,
                 from /usr/include/c++/4.8/bits/locale_classes.h:40,
                 from /usr/include/c++/4.8/bits/ios_base.h:41,
                 from /usr/include/c++/4.8/ios:42,
                 from /usr/include/c++/4.8/ostream:38,
                 from /usr/include/c++/4.8/iostream:39,
                 from ./../Header Files/MainGame.h:2,
                 from ./MainGame.cpp:2,
                 from main.cpp:1:
/usr/include/c++/4.8/bits/basic_string.h:490:7: error:   initializing argument 1 of ‘std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ [-fpermissive]
       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());

【问题讨论】:

  • 查看错误信息的最后一行。
  • @JohnDoe 如果您指出错误所在的行会有所帮助。没有人会费力通过数行来找出错误所在。
  • #include你的.cpp文件?
  • 您不是在尝试将const char * 转换为字符串,而是在尝试将char 转换为字符串。
  • @JohnDoe 你没有。你需要退后一步,弄清楚你真正想让你的程序做什么,而不是在编译之前改变它。

标签: c++ char constants


【解决方案1】:

实际上,您的目标似乎是将单个char 转换为std::string

您不能使用单个 char 初始化 std::string。最终会发生的是,编译器将尝试将char 提升为const char *,正如错误所描述的那样。

你想要的是 std::string 构造函数,它接受一个字符和一个计数:

 std::string charStr = string(1, *it);

查看链接here并查看构造函数2)

【讨论】:

  • 非常感谢先生.. 我只是愚蠢
猜你喜欢
  • 2016-06-10
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 2018-08-23
相关资源
最近更新 更多