向量中的结构中的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 &lt;&lt; "\nCourse name : "; cin &gt;&gt; courseList[size].nameOfCourse; //work cout &lt;&lt; "\nGroup name : "; cin &gt;&gt; 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指针的值分配给结构中的指针[关闭]

C语言数据结构中的向量的具体定义是啥?怎么使用?最重要的是使用。诚请高手出来交流学问!

我可以用吗 。作为gnu c结构中的成员限定符[关闭]

malloc 用于 C 中的结构和指针

如何根据 R 中的用户定义层次结构找到向量的最大字符?

R语言基础知识学习:R中的数据类型和数据结构