C++ 包含二维字符数组的构造函数
我正在尝试创建第二个包含2D数组的构造函数,但似乎无法使其正常工作。如果你需要更多的信息,尽管问,我会尽力提供和回答 Node.hC++ 包含二维字符数组的构造函数,c++,arrays,multidimensional-array,constructor,C++,Arrays,Multidimensional Array,Constructor,我正在尝试创建第二个包含2D数组的构造函数,但似乎无法使其正常工作。如果你需要更多的信息,尽管问,我会尽力提供和回答 Node.h struct data { string record; string ID; string name; string email; string units; string major; string grade; int absent; char missed[32][32]; }; class List;
struct data
{
string record;
string ID;
string name;
string email;
string units;
string major;
string grade;
int absent;
char missed[32][32];
};
class List;
class ListNode
{
friend class List;
friend struct data;
public:
ListNode();
//ListNode(data newData);
ListNode(string newrecord,
string newID,
string newname,
string newemail,
string newunits,
string newmajor,
string newgrade);
ListNode(string newRecord,
string newId,
string newName,
string newEmail,
string newUnits,
string newMajor,
string newGrade,
int newAbsent,
char dates[][32]); // this constructor
ListNode(ListNode ©Object);
~ListNode();
data getData() const;
ListNode *getNextPtr() const;
ListNode & operator = (ListNode &rhs);
private:
data mData;
ListNode *mpNext;
};
在Node.cpp中:
ListNode::ListNode(string newRecord,
string newId,
string newName,
string newEmail,
string newUnits,
string newMajor,
string newGrade,
int newAbsent,
char date[32][32] )
{
mData.record = newRecord;
mData.ID = newId;
mData.name=newName;
mData.email=newEmail;
mData.units=newUnits;
mData.major=newMajor;
mData.grade=newGrade;
mData.absent=newAbsent;
memcpy(mData.missed, date, sizeof(date)); //attempt at copying
//mData.missed = date;
this->mpNext = NULL;
}
在Linkedlist.cpp中这是错误开始的地方:
ListNode *List::makeNodeM (string newRecord,
string newId,
string newName,
string newEmail,
string newUnits,
string newMajor,
string newGrade,
string newAbsent,
char dates[32][32])//here and
{
ListNode *pMem = NULL;
pMem = new ListNode(newRecord,
newId,
newName,
newEmail,
newUnits,
newMajor,
newGrade,
newAbsent,
dates); //here
return pMem;
}
当您使用诸如
char date[32][32] )
编译器忽略第一个维度的大小。就好像你用过
char date[][32] )
鉴于此,sizeof(date)
与sizeof(void*)
相同
也就是说,这条线
memcpy(mData.missed, date, sizeof(date)); //attempt at copying
不要复制你希望它会复制的东西。把那条线换成一个环
for (int i = 0; i < 32; ++i )
{
memcpy(mData.missed[i], date[i], sizeof(data[i]));
}
for(int i=0;i<32;++i)
{
memcpy(数据缺失[i]、日期[i]、大小(数据[i]);
}
我认为适用于您的问题的最佳解决方案是
只需将Node.cpp中的代码替换为以下代码
ListNode::ListNode(string newRecord,
string newId,
string newName,
string newEmail,
string newUnits,
string newMajor,
string newGrade,
int newAbsent,
char date[][32] )
{
mData.record = newRecord;
mData.ID = newId;
mData.name=newName;
mData.email=newEmail;
mData.units=newUnits;
mData.major=newMajor;
mData.grade=newGrade;
mData.absent=newAbsent;
memcpy(mData.missed, date, sizeof(date)); //attempt at copying
//mData.missed = date;
this->mpNext = NULL;
}
什么的二维数组?2d字符串数组?@Abhi这是一个2d字符数组。它是[32][32]它是否给出了任何错误?@YasirMajeed是的,我在发生错误的代码中添加了注释。IntelliSense:没有与构造函数“ListNode::ListNode”匹配的实例参数列表参数类型为:(std::string,std::string,std::string,std::string,std::string,std::string,char(*)[32]只需将char dates[32][32]替换为char dates[][].除此之外,你知道为什么它会给我Linkedlist中的语法错误吗。cpp@Montop20,我无法回答这个问题,因为您没有发布类
List
的定义。您只发布了List::makeNodeM
的实现。