雪傲天1 2023-01-08 18:03 采纳率: 96.2%
浏览 13
已结题

我在学习函数模板的时候,代码完全和视频里面敲的一样,希望有人能告诉我怎么改正这些错误我在学习类模板成员函数类外实现时,希望有人帮一下

我在学习函数模板的时候,代码完全和视频里面敲的一样,希望有人能告诉我怎么改正这些错误
我在学习类模板成员函数类外实现时,遇到了三个错误,不会改正,希望有人帮一下

#include<string>
template<class T1,class T2>
class Person
{
public:
    Person(T1 name,T2 age);
    void showPerson();
    T1 m_Name;
    T2 m_Age;
};
//构造函数类外实现
template<class T1,class T2>
Person<T1.T2>::Person(T1 name,T2 age)
{
    this->m_Name=name;
    this->m_Age=age;
}
template<class T1,class T2>
void Person<T1,T2>::showPerson()
{
    cout<<"name:"<<this->m_Name<<"age:"<<this->m_Age<<endl;
}
void test01()
{
    Person<string,int> P("Tom",20);
    P.showPerson();
}
int main()
{
    test01();
    system("pause");
    return 0;
}

错误 1 error C2143: 语法错误 : 缺少“,”(在“.”的前面)
错误 2 error C2649: “typename”: 不是“class”
错误 3 fatal error C1004: 发现意外的文件尾

  • 写回答

1条回答 默认 最新

  • 如果皮卡会coding 2023-01-08 20:22
    关注

    我增加了两行的初始声明 + 第13行的点改为逗号。然后就跑起来了:

    效果如下:

    img

    代码如下:

    #include<string>
    #include<iostream>   // 增:初始声明 
    using namespace std; // 增:初始声明
     
    template<class T1,class T2>
    class Person
    {
    public:
        Person(T1 name,T2 age);
        void showPerson();
        T1 m_Name;
        T2 m_Age;
    };
    //构造函数类外实现
    template<class T1,class T2>
    Person<T1,T2>::Person(T1 name,T2 age)  // 改:这一行的点,应该是逗号 
    {
        this->m_Name=name;
        this->m_Age=age;
    }
    template<class T1,class T2>
    void Person<T1,T2>::showPerson()
    {
        cout<<"name:"<<this->m_Name<<"age:"<<this->m_Age<<endl;
    }
    void test01()
    {
        Person<string,int> P("Tom",20);
        P.showPerson();
    }
    int main()
    {
        test01();
        system("pause");
        return 0;
    }
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月5日
  • 已采纳回答 1月28日
  • 创建了问题 1月8日