簡體   English   中英

C++ 沒有合適的轉換 function from to 存在

[英]C++ no suitable conversion function from to exists

我試圖讓 function membername返回字符串staffmemberusermember使用數據類型字符串這不可能嗎? 如果沒有,我可以使用其他數據類型嗎?

    string membername()
    {
        if (member == 1)
        {
            string studentmember;
            cout << "Enter Student Member Name (possible names: Tom, Max, Ben): ";
            cin >> studentmember;
            return studentmember;
        }

        if (member == 2)
        {
            string staffmember;
            cout << "Enter Staff Member Name (possible names: Linda, Mary, Bob): ";
            cin >> staffmember;
            return staffmember;
        }

        else
        {
            cout << "Enter a valid number" << endl;
            return;
        }
    }

你可以這樣做:

struct Person
{
    int id;  // Every person has an ID.
    std::string name;  // Every person has a name.

    // Every Person has a function to input their name,
    //    implemented (specialized) by the child.
    virtual void    get_name() = 0;
};

struct Student : public Person // A student is-a person
{
    void get_name()
    {
        std::cout << "Enter Student's name:";
        std::getline(std::cin, name);
    }
};

struct Staff : public Person // A staff member is-a person
{
    void get_name()
    {
        std::cout << "Enter Staff's name:";
        std::getline(std::cin, name);
    }
};

student 和 staff 對象有不同get_name方法。

您可以將他們一般地視為一個人:

Person * p1 = new Student;
Person * p2 = new Staff;
p1->get_name(); // Get the name of the person, using appropriate prompt.
p2->get_name(); // Uses the Staff::get_name() function.

對於模板版本,您必須為人員類型使用方法(或成員)。

template <typename College_Person>
void get_name(College_Person& cp)
{
   const std::string person_type_name = cp.get_type_name();
   std::cout << "Enter " << person_type_name << " name: ";
   std::getline(std::cin, cp.name);
}

或者

template <typename College_Person>
void get_name(College_Person& cp)
{
    std::cout << "Enter "
              << cp.person_type_name
              << " name: ";
    std::getline(std::cin, cp.name);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM