我正在尝试使用模板化的类,我发现了这个错误:
Error C2039 'getName': is not a member of 'Person<T>
这是我的班级结构:
struct professor
{
static const char name[];
static const age = 50;
};
struct student
{
static const char name[];
static const age = 21;
};
const char professor::name[] = "Jules";
const char student::name[] = "Michael";
// Please make the Person template class here.
template <class T>
class Person
{
public:
Person();
char[] getName();
private:
T & m_Person;
};
template<class T>
Person<T>::Person()
{
m_Person= T;
}
template<class T>
char* Person<T>::getName()
{
return m_Person.name;
}
你知道什么是失败的吗?
实际上我不知道类定义等是否正确,因为我对模板化的类很新,所以如果你看到任何其他错误那就太好了如果你警告我。
感谢你,我希望你能帮助我。
答案 0 :(得分:2)
从头到尾修复编译错误。 char[]
不是有效的返回类型,getName()
的函数定义无法编译,这就是您收到错误的原因。
您还缺少age
成员变量的类型说明符,因为C ++不支持默认的int。
你的代码有点令人困惑,我想你想要这样的东西:
#include <string>
#include <iostream>
struct professor
{
std::string name;
int age;
};
struct student
{
std::string name;
int age;
};
template <class T>
class Person
{
public:
Person(const T& person) : m_Person(person) {}
std::string getName()
{
return m_Person.name;
}
private:
T m_Person;
};
int main() {
student s{"Michael", 21};
Person<student> p(s);
std::cout << p.getName();
return 0;
}
如果要使用仅包含静态成员的类作为模板参数,则无需存储实例:
#include <iostream>
struct S {
static const int x = 42;
};
template <typename T>
struct A {
int getValue() {
return T::x;
}
};
int main() {
A<S> a;
std::cout << a.getValue();
return 0;
}