所以我再一次需要这个课程的帮助。也许是因为我累了,但我似乎无法找到逻辑错误,我相信我已经在这里做了。这是我的代码:
#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。任何人都可以向我解释这个吗?
答案 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
,则可访问的索引为0
到N-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;'参考 - 保存制作副本。无论哪种方式使原型和功能签名匹配。