类模板参数怎么老是有问题

zhangyuan850 2017-03-12 09:38:50
学习类,继承,派生,模板,自己想把这几个联起来练习一下,以为简单,做起来,老是提示模板参数不对。请朋友们再帮看看,分析,解决问题,谢谢。
#include<iostream>
#include<fstream>
using namespace std;
template <typename T>
class Person
{
public:
Person(T *name,bool sex)
{
strcpy(m_name, name);
m_sex=sex;
}
~Person(){ }
void SetName(char * name){strcpy(m_name, T name);}
char * GetName(){return m_name;}
void SetSex(bool sex){m_sex=sex;}
bool GetSex(){return m_sex;}
virtual void DisplayInfo()
{
cout<<"个人信息:"<<endl
<<"姓名:"<<m_name<<endl
<<"性别:";
if(m_sex==true)
cout<<"男"<<endl;
else
cout<<"女"<<endl;
}
protected:
char m_name[20];
bool m_sex;
};
template <char * sno,typename T,bool sex>
class Student: virtual public Person<T>
{
public:
Student(char * sno,T *name,bool sex,char *major):Person( T name,sex)
{
strcpy(m_sno,sno);
strcpy(m_major,major);
}
~Student(){ }
void SetSno(char *sno){strcpy(m_sno,sno);}
char * GetSno(){return m_sno;}
void SetMajor(char *major){strcpy(m_major,major);}
char * GetMajor(){return m_major;}
void DisplayInfo()
{
cout<<"学生信息:"<<endl
<<"学号:"<<m_sno<<endl
<<"姓名:"<<m_name<<endl
<<"性别:";
if(m_sex==true)
cout<<"男"<<endl;
else
cout<<"女"<<endl;
cout<<"专业:"<<m_major<<endl;
}
private:
char m_sno[10]; //学号
char m_major[20]; //专业
};
template <char *tno,typename T,bool sex>
class Teacher:virtual public Person<T>
{
public:
Teacher(char * tno,T *name,bool sex,char * depart):Person(T name,sex)
{
strcpy(m_tno,tno);
strcpy(m_depart,depart);
}
~Teacher(){ }
void SetTno(char * tno){strcpy(m_tno,tno);}
char * GetTno(){return m_tno;}
void SetDepart(char *depart){strcpy(m_depart,depart);}
char * GetDepart(){return m_depart;}
private:
char m_tno[6]; //教师号
char m_depart[20];//系
};
template<typename T>
void Print(Person <T> rp)
{
rp.DisplayInfo();
}
---------------------------------------------
#include<iostream>
#include<fstream>
#include"virtualwrite.h"
using namespace std;
struct Studentinfo
{
char num[10];
char name[20];
bool sex;
char major[20];
};
int main()
{
Studentinfo stu[3]={
{"1610101","唐斌",true,"医学"},
{"1610102","李慧慧",false,"葡萄牙语"},
{"1610103","王鑫楚",true,"光电学"}
};

Person <char>person("陈雨",false);
Print(person);
cout<<endl;
cout<<"通过student类多态性显示信息:"<<endl;
Student < char *sno,char *name,bool sex >student("1610101","唐斌",true);
print(student);
return 0;
}
提示信息:
teststudentinfo.cpp(61): error C2146: 语法错误: 缺少“,”(在标识符“sno”的前面)
teststudentinfo.cpp(61): error C2977: “Student”: 模板 参数太多
请帮助看看错在哪里了,提示“”Student <char *sno,char,bool sex >student("1610101","唐斌",true,"医学")“这里有问题,自己试 了很多次,都是不成功。
...全文
231 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-03-17
  • 打赏
  • 举报
回复
引用 11 楼 zhangyuan850 的回复:
始终没有成功,谢谢朋友们。
语法糖越甜,编译调试查错越苦! 尝到有多苦了吧。
zhangyuan850 2017-03-17
  • 打赏
  • 举报
回复
始终没有成功,谢谢朋友们。
赵4老师 2017-03-14
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
https://www.baidu.com/s?wd=C%2B%2B模板圣经


zhangyuan850 2017-03-14
  • 打赏
  • 举报
回复
引用 6 楼 adeng1919 的回复:
Student < char *sno,char *name,bool sex >student("1610101","唐斌",true);
----------------------------- 谢谢,按这个方法试了,提示错误: 错误 1 error C2146: 语法错误: 缺少“,”(在标识符“sno”的前面) 错误 2 error C2146: 语法错误: 缺少“,”(在标识符“name”的前面)
真相重于对错 2017-03-14
  • 打赏
  • 举报
回复
Person(T *name,bool sex) { strcpy(m_name, name); m_sex=sex; } name的类型是随着模板参数确定的,怎么能想当然的是char*
xskxzr 2017-03-14
  • 打赏
  • 举报
回复
template <char * sno,typename T,bool sex> class Student: virtual public Person<T> 你关于Student的定义中,模板形参sno和sex有用到吗?
懒懒的吉他手 2017-03-13
  • 打赏
  • 举报
回复
Student < char *sno,char *name,bool sex >student("1610101","唐斌",true);
fanneee 2017-03-13
  • 打赏
  • 举报
回复
类模板的参数是类型,不是变量。如vector<int>。
zhangyuan850 2017-03-13
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。 模板是语法糖。 语法糖越甜,编译调试查错越苦! 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。
------------------------------- 老师是说的对,每次用/* */注释,找到具体位置,就是: Student < char *,char *,bool >student("1610101","唐斌",true); 错误提示为:“Student”:“sno”的模板参数无效,应为编译时常量表达式 error C2514: “Student”: 类没有构造函数 另一个,使用模板,开始仅仅是练习,为了把派生虚继承模板等联在一起,练习练习提高一下,谁知比想象的难多了,搞了几天了,老是在这句有问题。
zhangyuan850 2017-03-13
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。 模板是语法糖。 语法糖越甜,编译调试查错越苦! 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。
------------------------------
赵4老师 2017-03-13
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。 模板是语法糖。 语法糖越甜,编译调试查错越苦! 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧