2013-07-11 42 views
0
#include <iostream> 
#include <string> 

using namespace std; 

struct FriendInfo 
    { 
     string name; 
     int last_day; 
    }; 

FriendInfo GrowArray(FriendInfo friend_list,int sizing); 

int main() 
{ 
    int initial_friends; 
    cout << "How many friends would you like to add--> "; 
    cin >> initial_friends; 
    FriendInfo friends[initial_friends]; 
    for (int i = 0; i < initial_friends;i++) 
    { 
     cout << "What is your friend's name?--> "; 
     cin >> friends[i].name; 
     cout << "When was the last time you talked to " << friends[i].name << " ?--> "; 
     cin >> friends[i].last_day; 
    } 
    for (int i = 0; i < initial_friends;i++) 
     cout << friends[i].name << " " << friends[i].last_day << "\n"; 
    cout << "What would you like to do now?\n1. Add another friend?\n2. Update one of yourfriends?\n3. Sort friends by day?4. Quit.\n--> "; 
    int option; 
    cin >> option; 
    while (option != 4) 
    { 
     if (option == 1) 
     { 
      friends = GrowArray(friends,initial_friends); 
      cout << "What is your new friend's name?--> "; 
      cin >> friends[initial_friends].name; 
      cout << "When was the last time you talked to " << friends[initial_friends].name << " ?--> "; 
      cin >> friends[initial_friends].last_day; 
     } 

    } 
} 

FriendInfo GrowArray(FriendInfo friend_list, int sizing) 
{ 
    FriendInfo new_list[sizing + 1]; 
    for (int i = 0;i < sizing;i++) 
    { 
     new_list[i].name = friend_list[i].name; 
     new_list[i].last_day = friend_list.last_day; 
} 
return new_list; 
} 

该程序将结构放入一个数组中,该数组包含一个朋友的姓名以及他们最后一天与他们交谈的内容。其中一个选项是添加另一个朋友。函数GrowArray将最初的数组与朋友和日子进行比较,制作另一个数组并将原始数组复制到新数组中。但是当我使用函数时,我得到这个错误 - >错误:无法将'FriendInfo *(&朋友)'从'FriendInfo *'转换为'FriendInfo'。怎么了?函数以阵列填充结构,并返回一个结构相同的较大阵列

+2

为什么你不只是使用'std :: vector'? VLA不是标准的。 – chris

回答

1

你不能重新指定这样的friends,因为它不是一个指针,它是一个数组。 即使你可以,你所做的并不安全,因为GrowArray只是在栈上创建一个新数组,当函数返回时它将被销毁。

您应该使用newdelete来创建和销毁数组(然后您可以将它们作为指针传递),或者最好使用std::vector,它可以为您处理所有这些事情。

+0

+1,并且通过引用来传递向量,以防OP对它不明显,并且通过原始发布的代码判断它不会。或者抛出函数的整个概念,只是使用'push_back()'来实现它的功能。 – WhozCraig