首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建和访问类对象的动态数组

创建和访问类对象的动态数组
EN

Stack Overflow用户
提问于 2016-12-01 19:46:04
回答 1查看 495关注 0票数 0

我一直在做一个处理电话簿的项目。我的程序从数据表中读取数据,并创建一个电话阵列。

我有两门课:软电话和舰队。

软电话包含电话(私有)的所有值,以及获取/设置和打印函数来访问它们(公共)。

代码语言:javascript
复制
class softphone {

public:
    string name;
    //All my other variables

public:
    softphone();
    softphone(const softphone &obj);
    ~softphone();
    //Get functions
    string get_name();
    //ect
    //Set functions
    void set_name(string);
    //ect
    //Print functions
    void print_name();
    //ect
}

机队包含一系列电话和输出操作功能

代码语言:javascript
复制
class fleet {

private:
    //Some variables and buffers

    softphone* phone; ->This is the array containing all the phones 


public:

//Read file and create array functions

//Functions
void print_fleet();
    //More output functions

};

舰队类有一个指向软电话的指针,我使用它动态地创建一个电话数组。它通过从文件中读取目录来创建数组。(我不知道在运行前有多少部电话。)

它计算文件中的行数,然后创建和数组足够大以容纳所有数据:

代码语言:javascript
复制
phone = new softphone[number_of_lines - 1]; //Line 1 is header

它从文件中读取,用集合函数保存数据,然后使用phone++增加指针;

到目前一切尚好。现在,如果我想要访问这些电话,并调用一个成员的功能。

代码语言:javascript
复制
phone[0].print_name();

编译器没有给出错误,但是输出是垃圾(屏幕上的无限随机字符)。我在内存位置异常处得到一个std::bad_alloc。

代码语言:javascript
复制
for(int i = 0; i < (number_of_lines - 1); i++){
    phone--
}
phone->print_name();

现在起作用了。这样我就可以访问所有的手机并打印出来。所有的数据都在那里。但是我必须增加/减少指针,而且我不能使用索引号。

怎么才能用这个索引号呢?为什么当我使用它的时候,电脑会变得疯狂,而当我增加的时候,它会变得很好呢?

谢谢你的回复,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-01 20:00:13

创建数组时,phone将指向第一个元素。然后,开始递增指针,直到到达数组的末尾为止。此时,phone不再指向数组的开头。然后,运行循环,该循环通过指针返回,直到返回到起点,然后一切又开始工作。我建议您停止使用指针算法,而只使用索引。然后,您可以放心,电话总是指向数组的开头。或者,您可以赋值一个不同的变量,并使用它作为指针填充数组。或者,您也可以像@PaulMcKenzie建议的那样使用std::vector。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40919157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档