Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 包含二维字符数组的构造函数_C++_Arrays_Multidimensional Array_Constructor - Fatal编程技术网

C++ 包含二维字符数组的构造函数

C++ 包含二维字符数组的构造函数,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;

我正在尝试创建第二个包含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;


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 &copyObject);
   ~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
的实现。