编码简单函数时出现此错误。这是我的功能规范。
string studentName;
string courseTaken[3];
void setStudent(string, string[]);
void Student::setStudent(string n, string a[])
{
studentName= n;
courseTaken = a;
}
这是我得到的错误 错误:此行中的字符串*到字符串[3]的赋值不兼容类型courseTaken = a;。在我的代码中,我从未声明任何指针或字符。
我不太明白这里出了什么问题。
答案 0 :(得分:1)
您似乎不了解C格式数组的数组decay
机制。
对于许多上下文,数组名称将被解释为指向数组的第一个元素的指针。而且这个指针是prvalue
,就像this
指针一样,你不能分配给它。
"现代Cpp方式"(C ++ 11)是使用std::array
,它重载=operator
并存储数组的大小,以便它不会成为传递给函数时腐朽了。
第二种方法是传递引用,使用template
可以确保数组的大小,然后使用std::memcpy
。您可以添加一个参数来存储数组的大小,然后您也可以使用memcpy
。
我希望你使用第一种方式,不要忘记-std=c++11
答案 1 :(得分:0)
您无法使用string a[]
运算符将字符串数组courseTaken
分配给数组=
。表达式string a[]
相当于std::string*
。这就是你得到编译器错误的原因。
这可能是你想要的:
#include <iostream>
using namespace std;
class Student
{
public:
string studentName;
string courseTaken[3];
void setStudent(string n, string a[]);
};
void setStudent(string n, string a[]);
void Student::setStudent(string n, string a[])
{
studentName = n;
for(int i=0; i < sizeof(courseTaken)/sizeof(courseTaken[0]); i++)
courseTaken[i] = a[i];
}
int main()
{
Student student;
string courses[3] = {"Cobol","C++","Fortran"};
student.setStudent("Eva", courses);
for (int i = 0; i < 3; i++){
cout << student.courseTaken[i] << endl;
}
return 0;
}
输出:
Cobol
C++
Fortran
答案 2 :(得分:0)
这是因为您将数组传递给变量,这就是发生此错误的原因。要解决此问题,您可以在参数中使用指针来解决此问题。将您的功能更改为此。
void Student::setStudent(string n, string* a)
{
studentName= n;
courseTaken = a;
}