cannot convert 'std::basic_string' to 'const char*' for argument '1' to 'int system(const char*)'

前端 未结 6 1248
无人及你
无人及你 2020-11-29 07:18

I get this error: \"invalid operands of types \'const char*\' and \'const char [6]\' to binary \'operator+\'\" when i try to compile my script. Here should be the error:

相关标签:
6条回答
  • 2020-11-29 07:56

    try using concatenation of string

    Statistics(string date)
        {
            this->date += date;
        }
    

    acually this was a part of a class..

    0 讨论(0)
  • 2020-11-29 08:04

    std::string + const char* results in another std::string. system does not take a std::string, and you cannot concatenate char*'s with the + operator. If you want to use the code this way you will need:

    std::string name = "john";
    std::string tmp = 
        "quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '" + 
        name + ".jpg'";
    system(tmp.c_str());
    

    See std::string operator+(const char*)

    0 讨论(0)
  • 2020-11-29 08:05

    The type of expression

    " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"
    

    is std::string. However function system has declaration

    int system(const char *s);
    

    that is it accepts an argumnet of type const char *

    There is no conversion operator that would convert implicitly an object of type std::string to object of type const char *.

    Nevertheless class std::string has two functions that do this conversion explicitly. They are c_str() and data() (the last can be used only with compiler that supports C++11)

    So you can write

    string name = "john";
    
    system( (" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'").c_str() );
    

    There is no need to use an intermediate variable for the expression.

    0 讨论(0)
  • 2020-11-29 08:05

    As all the other answers show, the problem is that adding a std::string and a const char* using + results in a std::string, while system() expects a const char*. And the solution is to use c_str(). However, you can also do it without a temporary:

    string name = "john";
    system((" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'").c_str());
    
    0 讨论(0)
  • 2020-11-29 08:08

    The system function requires const char *, and your expression is of the type std::string. You should write

    string name = "john";
    string system_str = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'";
    system(system_str.c_str ());
    
    0 讨论(0)
  • 2020-11-29 08:10

    The addition of a string literal with an std::string yields another std::string. system expects a const char*. You can use std::string::c_str() for that:

    string name = "john";
    string tmp = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"
    system(tmp.c_str());
    
    0 讨论(0)
提交回复
热议问题