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

时间:2018-04-01 03:11:06

标签: c++ arrays

编码简单函数时出现此错误。这是我的功能规范。

string studentName;
string courseTaken[3];
void setStudent(string, string[]); 

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

这是我得到的错误 错误:此行中的字符串*到字符串[3]的赋值不兼容类型courseTaken = a;。在我的代码中,我从未声明任何指针或字符。

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

3 个答案:

答案 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;
}