在c ++中,我有一个名为“Student.h”的文件
class LinkedList {
private:
class Student {
public:
int stId;
char stName [20];
char stMajor[20];
double stAverage;
Student * next;
Student() {
next = 0;
}
Student(int stId, char stName [20], char stMajor[20], double stAverage) {
this.stId = stId;
strcopy(this.stName, stName); // there is error here !
strcopy(this.stMajor, stMajor);
this.stAverage = stAverage;
}
我该怎么办?!
答案 0 :(得分:7)
this
是C ++中的指针,而不是Java中的引用。另外,您需要strcpy()
而不是strcopy()
试试这个
strcpy(this->stName, stName);
strcpy(this->stMajor, stMajor);
P.S:在C ++中,始终建议优先使用std::string
而不是C风格的数组
更简洁的代码版本就是这样的
struct Student {
int stId;
std::string stName;
std::string stMajor;
double stAverage;
Student * next;
Student():stId(),stAverage(),next()//prefer initialization-list to assignment
{
}
Student(int stId, const std::string &stName, const std::string &stMajor, double stAverage){
this->stId = stId,
this->stName = stName ,
this->stMajor = stMajor,
this->stAverage = stAverage;
}
};
答案 1 :(得分:2)
我该怎么办?!
你应该:
使用std::string
代替原始数组。
使用std::list
而非发明自己的(除了了解链接列表的目的)。
不表示正式参数中的数组大小,例如char stName [20]
;形式参数类型不保留大小信息,它只是转换为指针类型。
通常避免直接使用this
。
通常使用初始化列表而不是构造函数体中的赋值。
干杯&第h。,
答案 2 :(得分:1)
我认为你的意思是strcpy
功能(没有 o )。
答案 3 :(得分:0)
this
是一个指针,而不是一个引用,所以你必须使用指针解引用运算符:
strcpy(this->stName, stName);
或
strcpy((*this).stName, stName);
此外,我不建议使用char[20]
作为学生姓名的数据类型 - 这很容易出现缓冲区溢出错误。您可以使用strncpy
strcpy(this->stName, stName, 19);
this->stName[20]=0;
但最方便的方法是使用std::string
,可以通过分配方便地复制它。
最后,如果你为成员变量名选择了一些约定,你可以在没有this
的情况下引用它们。例如:
class Student {
public:
std::string m_stName;
...
Student(int stId, std::string stName, ...) {
m_stName=stName;
或甚至(使用初始化程序):
Student(int stId, std::string stName, ...) : m_stName(stName) {
m_stName=stName;
答案 4 :(得分:0)
你能否使用std::string
?
string s1, s2 = "example";
s1 = s2;
无论如何,问题是在C ++ this
中返回指针,因此this.stId
错误,正确的形式为this->stId
,或者{ {1}}。