2012-02-11 582 views
0

所以我再次需要這個課程的一些幫助。也許它是我累了,但我似乎無法找到我確定在這裏做出的邏輯錯誤。這裏是我的代碼:錯誤:無法將參數1從std :: string轉換爲char *。困惑爲什麼它給了我這個錯誤。

#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 ::字符串給我。任何人都可以向我解釋這個嗎?

回答

3

您忘記了在文件頂部修改原型。

還在說

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

應該

void add (string, string, int); 
+0

啊謝謝。我不能相信我錯過了這一點。顯示等到最後一分鐘完成的情況。 – triple07 2012-02-11 05:08:22

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

您需要使聲明與定義匹配。在聲明中,您使用char *定義您使用string

如果要使用C字符串,請參閱c_str。如果你想使用字符串,請記住'&'作爲參考 - 保存複製。無論哪種方式使原型和功能簽名匹配。

相關問題