向量中的结构中的C ++结构[关闭]
Posted
技术标签:
【中文标题】向量中的结构中的C ++结构[关闭]【英文标题】:C++ struct in struct in vector [closed] 【发布时间】:2013-11-19 18:16:09 【问题描述】:我的结构和向量:
struct course
string nameOfCourse;
string prepodName;
group *mGroup;
vector<lect> *para;
;
struct lect
string date;
int numberOfPresentStudents;
;
struct group
string name;
int numberOfStudents;
;
vector<course> courseList;
如何在 :
中输入数据courseList[i].mGroup[i].name
如果我写
cin >> courseList[i].mGroup[i].name;
或
string tmp;
cin >> tmp;
courseList[i].mGroup[i].name = tmp;
我得到错误:
地址 0x........ 在 ....exe 中未处理的异常: 0xC0000005 : 在 0xCCCCCCE0 读取访问冲突
void inputS()
int size = courseList.size();
courseList.push_back(course());
cout << "\nCourse name : ";
cin >> courseList[size].nameOfCourse; //work
cout << "\nGroup name : ";
cin >> courseList[size].mGroup[size].name; //doesn't work
;
【问题讨论】:
"我怎样才能"push_back" in..." 试试打电话给push_back
?看看这里:en.cppreference.com/w/cpp/container/vector
创建一个相同类型的临时变量。然后推回去。
请注意,您不能 push_back 到 mGroup
,因为那是一个指针。但是你可以 push_back 到courseList
,这是你的问题吗?只需courseList.push_back(...);
您是否想过可能需要先为mGroup
分配内存?
或者mGroup
也应该是一个向量?也许 para 不应该是一个指针?如果您认为向量很难,恐怕指针会更糟。
【参考方案1】:
其实只有两种方式
cin >> courseList[i].mGroup[i].name;
可能会出错,向量courseList
对[i]
来说不够大,或者指针mGroup
没有指向[i]
的足够内存。
要解决这些问题,您必须确保courseList
足够大(如果您愿意,可以使用push_back
),或者您必须确保mGroup
指向足够的内存(使用new
大概)。
真的没什么好说的了,如果您发布更多代码并描述您想要实现的目标,您将获得更详细的帮助。
【讨论】:
void inputS() int size = courseList.size(); courseList.push_back(course()); cout << "\nCourse name : "; cin >> courseList[size].nameOfCourse; //work cout << "\nGroup name : "; cin >> courseList[size].mGroup[size].name; //doesn't work ;
好吧,问题是 mGroup 没有指向任何有用的内存。您需要使用new
为mGroup 分配一些内存。
或者您可以将 mGroup 更改为向量,然后对其使用 push_back。
好的,我该怎么做?类似courseLections[size].mGroup = new ....;
???
是的,类似courseList[size].mGroup = new group[...];
,将...
替换为您想要的组数。但就像我说的那样,向量比指针更容易。【参考方案2】:
试试这个:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct group
string name;
int numberOfStudents;
group(string na)
name = na;
;
struct lect
string date;
int numberOfPresentStudents;
;
struct course
string nameOfCourse;
string prepodName;
group *mGroup;
vector<lect> *para;
course(group* g)
mGroup = g;
;
int main()
vector<course> courseList;
string tempname;
cin >> tempname;
group newG(tempname);
course C(&newG);
courseList.push_back(C);
完美编译。这是link。
【讨论】:
以上是关于向量中的结构中的C ++结构[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
C中结构中的指针-如何将给定的void指针的值分配给结构中的指针[关闭]