2014-07-01 36 views
0

我寫了一段代碼。C++代碼不按預期返回向量,並在轉換時拋出錯誤

它做什麼?它打印某些內容,然後要求用戶插入他最喜歡的作者的名稱,然後將插入的作者添加到矢量中。

在代碼的最後兩行,分別,作者的矢量分配給一個矢量可變,但在這條線,它會引發下面的代碼:

error C2664: 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string(std::initializer_list<_Elem>,const std::allocator<char> &)' : cannot convert argument 1 from 'std::vector<std::string,std::allocator<_Ty>>' to 'const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &' 

因此,它未達到到最後一行。

但是,我的問題是,我想返回一個由用戶添加作者的作者矢量。這會導致問題,因爲在此之前,代碼正在工作。

下面是代碼:

#include "stdafx.h" 

#include <iostream> 
#include <string> 
#include <ctime> 
#include <vector> 

using namespace std; 

class SimpleClass 
{ 
public: string AuthorName; 
public: string AuthorLastWork; 
     vector<string> AuthorNames; 
public: int AuthorBirthYear; 

private: string AuthorBestSelling; 
private: int AuthorNumOfSoldWorks; 

public: 
    void SetAuthorName(string Name) 
    { 
     this->AuthorName = Name; 
     string namesOfAuthors[2] {"Jack London", "Flaubert"}; 
     if (Name == namesOfAuthors[0]) 
     { 
      this->setAuthorSoldWorks(2000000); 
     } 
     else if (Name == namesOfAuthors[1]) 
     { 
      this->setAuthorSoldWorks(5000); 
     } 
    } 

    int GetAuthorNumOfSoldWorks() 
    { 
     return this->AuthorNumOfSoldWorks; 
    } 


private : 
    void setAuthorSoldWorks(int number) 
    { 
     this->AuthorNumOfSoldWorks = number; 
    } 
}; // END OF CLASS 

class SecondClass : public SimpleClass 
{ 
public: 
    void AddAuthor(string name) 
    { 
     this->AuthorNames.push_back(name); 
    } 
    GetAuthors(string name) 
    { 
     return this->AuthorNames; 
    } 
}; 

int main() 
{ 
    string AuthorNameByUser; 

    SimpleClass SC; 
    SecondClass SecondClass; 
    SC.SetAuthorName("Jack London"); 

    cout << "This is our selected Author: " << SC.AuthorName << endl; 

    cout << "Number of sold works: " << SC.GetAuthorNumOfSoldWorks() << " works." << endl; 

    cout << endl; 

    cout << "Please type the name of your favorite author: "; 

    getline(cin, AuthorNameByUser); 

    SecondClass.AddAuthor(AuthorNameByUser); 

    vector<string> AuthorsCollection = SecondClass.GetAuthors(); 

    cout << "Thank for your particpiation. You have entered \"" << AuthorsCollection[0] << "\"" << endl; 

} 
+0

您錯過了'GetAuthors'成員函數的返回值。 – 101010

回答

2

GetAuthors()函數沒有返回類型。

您應該添加std::vector<string> GetAuthors(){ ... }

除此之外,你不應該使用using namespace std;,比SimpleClassSecondClass使用更具體的名稱,並且沒有與私人混用公開聲明,把它放在一個街區。