繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM