C++如何在函数中传递字符串数组并分配给变量?

C++ how to pass string array in function and assign to a variable?

本文关键字:数组 分配 变量 字符串 函数 C++      更新时间:2023-10-16

我在编写一个简单的函数时收到此错误。这是我的函数规范。

string studentName;
string courseTaken[3];
void setStudent(string, string[]); 
void Student::setStudent(string n, string a[])
{
studentName= n;
courseTaken = a;
}

这是我得到的错误:

在此行上将字符串*分配给字符串[3]时不兼容的类型 课程采取= a;

在我的代码中,我从未声明任何指针或字符。

我不太明白这里出了什么问题。

不能使用运算符将字符串数组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 

您似乎不了解 C 格式数组decay机制。 对于许多上下文,数组名称将被解释为指向数组第一个元素的指针。这个指针是一个prvalue就像this指针一样,你不能分配给它。 "现代 Cpp 方式"(C++11) 是使用std::array,它重载了=operator并存储数组的大小,以便在传递给函数时不会衰减。 第二种方法是传递引用,用template可以保证数组的大小,然后使用std::memcpy。您可以添加一个参数来存储数组的大小,然后您也可以使用memcpy。 我希望你使用第一种方式,不要忘记-std=c++11

这是因为您将数组传递给变量,这就是发生此错误的原因。要解决此问题,您可以在参数中使用指针来解决此问题。将您的函数更改为此函数。

void Student::setStudent(string n, string* a)
{
studentName= n;
courseTaken = a;
}