错误:无法将参数1从std :: string转换为char *。对为什么它给我这个错误感到困惑。

时间:2012-02-11 04:51:57

标签: c++

所以我再一次需要这个课程的帮助。也许是因为我累了,但我似乎无法找到逻辑错误,我相信我已经在这里做了。这是我的代码:

#include "Book.h"


using namespace std;

void add (char*, char*, int);
void remove (int&);
void list ();

int Count;

Book Bookshelf [4];

int main ()
{   
    string In;
    string N;
    string A;
    int Y;
    int Num;

    do
    {
        cout << "Bookshelf> ";
        getline(cin, In);

        if (In.compare("add") == 0)
        {
            cout << "Bookshelf> Enter book: ";
            cin >> N >> A >> Y;
            add (N,A,Y);
        }

        else if (In.compare ("remove") == 0)
        {
            cout << "Bookshelf> Select number: ";
            cin >> Num;
            remove (Num);
        }

        else if (In.compare("list") == 0)
        {
            list ();
        }

    } while (cin != "quit");

    return 0;
}

void add (string N, string A, int Y)
{
    if (Bookshelf[4].IsEmpty() == false)
        cout << "Error!" << endl;
    else
    {
        Bookshelf[Count] = Book (N,A,Y);
        Count++;
    }
    cout << "Bookshelf> ";
}

错误发生在add(N,A,Y);行,但对于我的生命,我不知道为什么这么说。它们对我来说都像std :: strings。任何人都可以向我解释这个吗?

3 个答案:

答案 0 :(得分:3)

您忘记在文件顶部修改原型。

它仍然说

void add (char*, char*, int);

应该是

void add (string, string, int);

答案 1 :(得分:2)

你的前方声明错误。

void add (char*, char*, int);

必须是 -

void add (string, string, int);

此外,如果数组大小为N,则可访问的索引为0N-1

Book Bookshelf [4];

// .....

if (Bookshelf[4].IsEmpty() == false)  // There is no object at Bookshelf[4]
                                      // Accessible indexes are 0 to 3

答案 2 :(得分:2)

您需要使声明与定义匹配。在声明中,您使用char *定义string

如果您想使用C字符串,请参阅c_str。如果你想使用字符串,请记住'&amp;'参考 - 保存制作副本。无论哪种方式使原型和功能签名匹配。