[英]C++ how to pass string array in function and assign to a variable?
我在编写简单函数时遇到此错误。 这是我的功能说明。
string studentName;
string courseTaken[3];
void setStudent(string, string[]);
void Student::setStudent(string n, string a[])
{
studentName= n;
courseTaken = a;
}
这是我得到的错误:
在该行中,将字符串*分配给字符串[3]时使用不兼容的类型courseTaken = a;
在我的代码中,我从未声明任何指针或char。
我不太了解这里出了什么问题。
看来您不了解C格式数组的数组decay
机制。 在许多情况下,数组名称将被解释为指向数组第一个元素的指针。 而且此指针是一个prvalue
,就像this
指针一样,您无法为其分配。 “现代Cpp方式”(C ++ 11)使用std::array
,它重载=operator
并存储数组的大小,以便在传递给函数时不会衰减它。 第二种方法是传递引用,使用template
可以确保数组的大小,然后使用std::memcpy
。 您可以添加一个存储数组大小的参数,然后也可以使用memcpy
。 我希望您使用第一种方法,不要忘记-std=c++11
您不能使用=
运算符将字符串数组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
这是因为您将数组传递给变量,这就是发生此错误的原因。 要解决此问题,您可以在参数中使用指针来解决此问题。 将功能更改为此。
void Student::setStudent(string n, string* a)
{
studentName= n;
courseTaken = a;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.