C2039 - FUNCTION不是CLASS的成员

时间:2018-06-14 23:09:17

标签: c++ class templates

我正在尝试使用模板化的类,我发现了这个错误:

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;
}

你知道什么是失败的吗?

实际上我不知道类定义等是否正确,因为我对模板化的类很新,所以如果你看到任何其他错误那就太好了如果你警告我。

感谢你,我希望你能帮助我。

1 个答案:

答案 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;
}