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]时不兼容的类型 课程采取= 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;
}
相关文章:
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 如何通过 malloc 为队列数组分配内存?
- 具有动态数组分配的OpenMP嵌套循环
- 如何为数组结构的数组分配内存
- 如何为结构数组分配内存?
- cpp 数组 - 分配常量索引有效,而非常量索引不起作用
- 如何为字符指针数组分配内存?
- 在 C++ 中初始化后的数组分配
- 将数据分配给了数组分配,但程序显示了以缓冲区超支的输出
- C++函数问题中的数组分配
- 子数组分配:使用聚合对象错误的预期"{...}"进行初始化
- 为什么我的指针数组分配不起作用
- std::堆栈和堆栈溢出错误的数组分配
- 在 c++ 中是否有通过声明"implicit"数组分配?
- 在 c++ 中为 2-D "Dynamically Created"数组分配值时遇到问题
- 如何为C++数组分配指向第一个元素的指针
- 字符数组分配
- 将数组分配在固定数量的线程之间
- 为构造函数中的数组分配值