c++ - 未在此范围内声明的函数和变量(c++)

标签 c++ class compiler-errors definition

我有点坚持我的家庭作业,需要一点帮助。我绝对不是在找人为我做作业,但我当然可以使用一些建议。

我真的很抱歉在一个已经发布了几十次的主题上发帖。我已经阅读了我能找到的东西,但我仍然被困住了。

该程序有 3 个与之关联的文件——app.cpp 有 main,student.h 有函数原型(prototype)和类定义。 student.cpp 具有所有功能。

我们刚刚开始学习类(class),而这个作业只是使用类(class)的练习。它比较两个学生 ID 以找出哪个更小,然后检查与该 ID 关联的 gpa 是否足够高以获得荣誉。

当我尝试编译它时,我收到一堆关于未在范围内声明的错误。我的理解是,当未提前声明某些内容时会发生此错误。但我无法弄清楚这可能是什么,因为一切都被宣布了。我让学校的导师快速看了一下,她没有看出问题所在。我将发布我的 3 个文件和我的错误消息 - 我希望它不会太多!

我真的非常感谢任何帮助!

应用程序.cpp

#include "student.h"

int main()
{
        Student s1("G10", 3.9);
        Student s2("G20", 3.5);

        isLessThanByID(s2);
        qualifyForHonor(minGpaForHonor);

        s1.print();
        s2.print();

        return 0;
}

学生.h
#ifndef STUDENT_H
#define STUDENT_H

#include <iostream>
using namespace std;

class Student
{
public:
        Student(const char initId[], double gpa);
        bool isLessThanByID(const Student& aStudent) const;
        bool qualifyForHonor(double minGpaForHonor) const;
        void print()const;

private:
        const static int MAX_CHAR = 100;
        char    id[MAX_CHAR];
        double  gpa;
};      double minGpaForHonor = 3.75;

#endif

学生.cpp

void Student::Student(const char initId[], double gpa)
{
        id = initId[];
}
bool Student::isLessThanByID(const Student& aStudent) const

        if(s1.isLessThanByID (s2) == > 0)
                cout << "s1 is greater than s2" << endl;
}
bool Student::qualifyForHonor(double minGpaForHonor, double gpa) const
{
        if (gpa >= minGpaForHonor)
        {
                return true;
        }
}

void Student::print() const
{
        cout << id << '\t' << gpa << endl;
}

错误
g++  -Wall -g -std=c++11  -c -o app.o app.cpp
app.cpp: In function ‘int main()’:
app.cpp:8:2: error: ‘isLessThanByID’ was not declared in this scope
  isLessThanByID(s2);
  ^~~~~~~~~~~~~~
app.cpp:9:2: error: ‘qualifyForHonor’ was not declared in this scope
  qualifyForHonor(minGpaForHonor);
  ^~~~~~~~~~~~~~~
app.cpp:9:2: note: suggested alternative: ‘minGpaForHonor’
  qualifyForHonor(minGpaForHonor);
  ^~~~~~~~~~~~~~~
  minGpaForHonor
<builtin>: recipe for target 'app.o' failed
make: *** [app.o] Error 1

最佳答案

isLessThanByIDqualifyForHonor是类中的成员函数Student ,因此应该在类 Student 的实例上调用.

        isLessThanByID(s2);
        qualifyForHonor(minGpaForHonor);

应该改为
        s1.isLessThanByID(s2);
        s1.qualifyForHonor(minGpaForHonor);

话虽如此,您显然有比这更多的错误。函数声明bool qualifyForHonor(double minGpaForHonor) constStudent类也与其在定义中的签名不匹配。

关于c++ - 未在此范围内声明的函数和变量(c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60160313/

相关文章:

c++ - 为什么我的程序打印默认构造函数?

c++ - 我不知道为什么我的变量一直重置为 0?

c++ - 为什么C++不允许派生类在初始化列表中使用基类成员?

python - 在类变量上调用类内的 type(dict) 函数 (Python 3.4)

C++ 将参数类型解释为构造函数

c - 第一个示例由于编译器错误而无法编译

c++ - 使用嵌套 vector 与扁平 vector 包装器时,行为异常

C++ 命名空间新手需要帮助

c++ - Xcode 错误 "No matching function for call to ' max'"

javascript - 关于在 React 中使用 ES6 类