c++ - 编译时报错no member function declared in class

标签 c++

我是 c++ 的新手,不知道为什么会收到此错误,但我认为这与将字符串类型用于 getter 方法有关。

错误信息:

C:\Users\Robin Douglas\Desktop\week6>g++ -c Student.cpp
Student.cpp:15:31: error: no 'std::string Student::get_name()' member function d
eclared in class 'Student'
Student.cpp:20:43: error: no 'std::string Student::get_degree_programme()' membe
r function declared in class 'Student'
Student.cpp:25:32: error: no 'std::string Student::get_level()' member function
declared in class 'Student'

学生.hpp

#include <string>

class Student
{
    public:
        Student(std::string, std::string, std::string);
        std::string get_name;
        std::string get_degree_programme;
        std::string get_level;
    private:
        std::string name;
        std::string degree_programme;
        std::string level;
};

学生.cpp

#include <string>
#include "Student.hpp"

Student::Student(std::string n, std::string d, std::string l)
{
    name = n;
    degree_programme = d;
    level = l;
}

std::string Student::get_name()
{
    return name;
}

std::string Student::get_degree_programme()
{
    return degree_programme;
}

std::string Student::get_level()
{
    return level;
}

最佳答案

以下代码定义字段(变量)而不是方法。

public:
    Student(std::string, std::string, std::string);
    std::string get_name;
    std::string get_degree_programme;
    std::string get_level;

然后,当您在 .cpp 文件中实现它时,编译器会提示您尝试实现未声明的方法(因为您将 get_name 声明为变量)。

std::string Student::get_name()
{
    return name;
}

要修复,只需如下更改代码:

public:
    Student(std::string, std::string, std::string);
    std::string get_name();
    std::string get_degree_programme();
    std::string get_level();

关于c++ - 编译时报错no member function declared in class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461275/

相关文章:

c++ - 什么是 DialogResult 函数 visual C++ 2010?

c++ - 如何确定作为对象传递给另一个类的模板类的数据类型

c++ - 这是未定义的行为吗?

带有自定义内存分配器的 std::vector 的 C++ 模板

c++ - 重新实现第 3 方非虚拟功能

c++ - 为什么 C++20 允许默认比较即使被删除也能编译?

c++ - 如何在 boolean 值(假和真)上编写 `for` 循环

c++ - 通过 QTextStream 流式传输到 QTextEdit

c++ - 事件日志最旧记录号

c++ - 强制转换是可覆盖的操作吗?如果是这样,如何?