我正在尝试为Student指针的链接列表编写toString函数,从Student类实现以前创建的toString函数。
我的问题是,当我遍历链表时,我无法创建每个Student对象,以便从Student类调用toString。
我认为这与构造新的Student对象时需要const& Student参数这一事实有关,但我不知道如何将每个temp-> s更改为constant& Stud。我可以使用const_cast,如下所示吗?
这是我到目前为止所做的:
std::string StudentRoll::toString() const {
Node* temp = head;
while(temp != NULL){ //my attempt
Student newStudent(const_cast <Student*> (temp->s));
*(newStudent).toString(); //toString function from Student class
temp = temp->next;
}
}
这是我的Student.h:
#include <string>
class Student {
public:
Student(const char * const name, int perm);
int getPerm() const;
const char * const getName() const;
void setPerm(const int perm);
void setName(const char * const name);
Student(const Student &orig);
~Student();
Student & operator=(const Student &right);
std::string toString() const;
private:
int perm;
char *name; // allocated on heap
};
这是StudentRoll.h
#include <string>
#include "student.h"
class StudentRoll {
public:
StudentRoll();
void insertAtTail(const Student &s);
std::string toString() const;
StudentRoll(const StudentRoll &orig);
~StudentRoll();
StudentRoll & operator=(const StudentRoll &right);
private:
struct Node {
Student *s;
Node *next;
};
Node *head;
Node *tail;
};
答案 0 :(得分:1)
const_cast
删除常量,因此在这种情况下你不想使用它。
由于Node
的{{1}}字段是s
,您只需取消引用它(Student*
运算符)即可提取*
对象。传递给Student
的构造函数时,Student
是隐式的。
尝试以下操作,并了解您需要从const &
返回一个值。
StudentRoll::toString()