2014-07-01 34 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使用更具体的名称,并且没有与私人混用公开声明,把它放在一个街区。