在堆上调用类(空字符串错误)C++

Posted

技术标签:

【中文标题】在堆上调用类(空字符串错误)C++【英文标题】:Calling classes on the heap (null string error) C++ 【发布时间】:2015-03-13 02:52:05 【问题描述】:

我有一个班级项目,我要列出 50 名学生的可爱名单,将他们放在堆上,然后打印、排序、重印。 我必须为此使用 OOP,这并不是什么大不了的事,但我正在努力将我的基础数据类连接到它们的父类。 我在代码编译的地方有它,但是给了我一个空字符串的逻辑错误。不知道为什么。开始取消任何空课程,现在它又对我大喊大叫了。 我正在使用的代码有点庞大,所以我将放入其中一个工作数据类,然后放入我试图使用其他类和主文件的类,所以请耐心等待这里...

-数据类,按预期工作

.h
class Academics

    private:
        string GPA;
        string credits;
    public:
        Academics();
        Academics(string GPA, string credits);
        string getAcademics();
;

.cpp begins
Academics::Academics()

    Academics::GPA = "";
    Academics::credits = "";

Academics::Academics(string GPA, string credits)

    Academics::GPA = GPA;
    Academics::credits = credits;

string Academics::getAcademics()

    stringstream ssAcad;
    ssAcad << GPA << endl << credits << endl;
    return ssAcad.str();

-调用者类,不工作

.h
class Student

    private:
        Name name;
        Address address;
        Academics academics;
        Date dob;
        Date doc;
    public:
        Student();
        Student(Name name, Address address, Date dob,
                Date doc, Academics academics);
        string getStudent();
;

.cpp begins
Student::Student()

    Student::name = Name("Oscar", "Grouch");
    Student::address = Address("123 Sesame Street","Trash Can","New York","NY","10128");
    Student::academics = Academics("4.00", "120");
    Student::doc = Date("05","21","1993");
    Student::dob = Date("06","01","1969");

Student::Student(Name name, Address address, Date dob, Date doc, Academics academics)

    Student::name = name;
    Student::address = address;
    Student::dob = dob;
    Student::doc = doc;
    Student::academics = academics;

string Student::getStudent()

    name.getName();
    address.getAddress();
    dob.getDate();
    doc.getDate();
    academics.getAcademics();

-主要

int main ()

Student student = Student();
cout << student.getStudent() << endl;
return(0);

非常感谢您对我需要查看的位置的任何帮助或见解

【问题讨论】:

第一个代码块应该是两个不同的文件吗? (Academics.h 和 Academics.cpp_ 不要转储所有代码,而是尝试生成MCVE。没有人愿意翻阅一页又一页的东西。如果某些部分“按预期工作”,则不需要包含它,请将其取出(并确保其余部分仍可编译、运行并给出错误) 是的,Academics.h 和 Academics.cpp 都在一起,Students.h 和 Students.cpp 也是如此。我认为将它们阻止在一起会更容易,但如果你愿意,可以改变它。而且我并没有倾倒所有……我确实尽量减少了。我可以编辑出包含等,但仅此而已。少一点,一切都会破裂。还有另外 300 行未显示... 也尝试调试您的代码。然后就可以看到逻辑错误是从哪里来的 【参考方案1】:

您的函数Student::getString() 没有返回语句,但被声明为返回一个字符串。

尝试添加return name.getName(); 或类似的内容以开始调试。

【讨论】:

我总是想念一些小事,让我花几个小时把头撞在墙上……现在我正在返回值而不是让计算机坐下来思考,不再出现空错误...

以上是关于在堆上调用类(空字符串错误)C++的主要内容,如果未能解决你的问题,请参考以下文章

C++ 类可以确定它是在堆栈上还是在堆上?

字符串类型是存储在堆上还是栈上?

如何限制对象只能建立在堆上或者栈上

如何从 RPC 调用返回空字符串?

返回在堆上分配的类的实例(C++)[关闭]

如何限制对象只能建立在堆上或者栈上(转载)