我正在创建一个对象数组,以将每个对象分配给另一个对象数组。下面的代码包括尝试从阵列中打印对象。我的班级有个人姓名的属性,他们可能有多少朋友的数量,以及用于在需要时扩展数组大小的容量变量。该类还初始化指向指针的指针,该指针旨在用于对象数组。
我想打印数组中对象的名称,以及第一个数组的每个元素指向的对象。但是,printFriends()方法不会接受我对使用的字符串变量的点运算符的使用。请参阅下面的printFriends()方法。
编译器 - G ++(Ubuntu 5.4.0-6ubuntu1~16.04.5)5.4.0。 Vim文本编辑器。错误报告在下面找到。
Person.h
class Person {
private:
Person **friends = NULL;
int friend_count = 0;
int friend_capacity = 0;
std::string name;
public:
Person(std::string n) {
friends = new Person*[100];
friend_capacity = 100;
for ( int i = 0; i < friend_capacity; i++ )
friends[i] = NULL;
name = n;
}
void growFriends() {
Person **tmp = friends; //Keep up with the old list
int newSize = friend_capacity * 2; //We will double the size of the list
friends = new Person*[newSize]; //Make a new list twice the size of original
for (int i = 0; i < friend_capacity; i++) {
//Copy the old list of friends to the new list.
friends[i] = tmp[i];
}
delete[] tmp; //delete the old list of friends
friend_capacity = newSize; //update the friend count
}
void printFriends() {
for ( int i = 0; i < friend_count; i++ )
std::cout << friends[i].name << std::endl;
}
/*
void addFriend(const Person &obj) {
Person **tmp = friends;
// Person f = new std::string(obj);
for (int i = 0; i < friend_capacity; i++)
friends[friend_count + 1] + obj;
friend_count = friend_count + 1;
}
*/
};
与人TEST.CPP
#include<iostream>
#include"Person.h"
int main() {
Person p1("Shawn");
p1.printFriends();
}
g ++ --std = c ++ 11 person-test.cpp -o p
在Person-test.cpp中包含的文件中:2:0: person.h:在成员函数'void Person :: printFriends()'中: person.h:46:31:错误:请求'中的成员'name'(((人)this) - &gt; Person :: friends +((sizetype)((long unsigned int )i)* 8ul)))',它是指针类型'Person *'(也许你打算使用' - &gt;'?) std :: cout&lt;&lt;朋友[i] .name&lt;&lt;的std :: ENDL;
此错误信息明显清楚,我理解删除错误的几种方法。一个是使用箭头符号,因为我确实使用指针。但是,这会导致分段错误。
我想通过遍历数组的元素来打印数组中的对象。我怎么能完成这个呢?使用点符号在我的程序中不起作用,如上所示,带有错误消息,但我想访问字符串以打印对象数组中的每个名称,另外每个对象数组的元素都指向第一个对象数组。
答案 0 :(得分:0)
friends
是一个指针数组;所以friends[i]
是一个指针;你需要“取消引用”去成员字段:
std::cout << friends[i].name << std::endl;
读起来像:
Person* friendI = friends[i];
std::cout << friendI.name << std::endl;
但你想要“穿过”friendI
指针;所以它需要:
std::cout << friendI->name << std::endl;
或(没有临时变量):
std::cout << friends[i]->name << std::endl;