C ++ char *,字符串指针和strcmp问题

这个问题由两部分组成:

第1部分 在下面的代码中,当我尝试编译时出现此错误: 错误:从'char'到'char *'的无效转换[-fpermissive]

#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <string.h> 
using namespace std;

bool check_input(char &buysell) {
    char const* buy = "b";
    char const* sell = 's'; //error here

    if (strcmp(cp, buy)!=0) or (strcmp(cp, sell)!=0) return false;  //errors out because of error above

    return true; 
}

int main() {
     cout << "!!!Hello once more" << endl; // prints !!!Hello once more

     string user_order;

     string done= "done trading";

     char buysell;

     while(user_order.compare(done) != 0) {
         cout << "enter order"<< endl;
         getline(cin, user_order);
         stringstream lineStream(user_order);
         lineStream >>   buysell;
         check_input(buysell);
     }
    return 0;
}

我不明白为什么会这样。我想要一个指向保存b值的char的指针,以及另一个指向保存s值的char的指针,这样strcmp就可以工作。

我不明白这两者之间的区别:

char const* buy = "b"; 
char const* sell = 's'; //error here : error: invalid conversion from 'char' to 'const char*' [-fpermissive]

buy应该是一个指向字符串文字“ b NULL”的指针,sell应该是一个指向字符文字“ s”的指针。为什么字符串文字有效而char文字无效?是不是应该和chars一起工作?

int strcmp ( const char * str1, const char * str2 );

第2部分: 在将s更改为使用双引号之后,代码仍然在下一行显示错误:

bool check_input(char &buysell) {
    char const* buy = "b";
    char const* sell = "s";

    if (strcmp(buysell, buy)!=0) or (strcmp(buysell, sell)!=0) return false;  //error: invalid conversion from 'char' to 'const char*' [-fpermissive]

    return true; 
}

因此,我认为买卖是指向持有NULL和isNULL的内存的点。但是buysell是一个直接的字符。这是否意味着在进行比较之前我需要将buysell转换为字符串?

谢谢