C ++ массив символов, передаваемых в функции - PullRequest
0 голосов
/ 29 ноября 2010

Эй, ребята, мне нужна помощь с этим.Я пишу действительно простую программу, которая будет генерировать массив символов firstName [количество] [размер].используя его, он затем передает его в функцию addPerson, и это изменяет значение.

Вот мой текущий код

void deletePerson(int &, int, char[], char[], char[], char[]);
int main()
{
char firstNames[100][25], lastNames[100][25], email[100][50], phone[100][16];
else if (userChoice == 'D')
    {
        deletePerson(count, amount, &firstNames,&lastNames,&email,&phone);
    }
}
void deletePerson(int count, int amount, firstNames&, lastNames&,email&,phone&);
{
//blahblahblah
}

Я знаю, что это неправильно, и извините за новизну.У меня это работало до такой степени, что это было только по ошибке, но потом я решил все изменить.Во всяком случае, я надеюсь, вы понимаете, что я пытаюсь сказать.В основном мне нужно передать массив и изменить его внутри функции.Как я могу это сделать?

Спасибо!

edit: Хорошо, я тоже не могу использовать глобальные переменные, это было бы слишком просто.

Я отредактировалкод, чтобы избавиться от &.это дает мне

ошибка LNK2019: неразрешенный внешний символ "void __cdecl deletePerson (int &, int, char (* const) [25], char (* const) [25], char (* const) [50]], char (* const) [16]) "(? deletePerson @@ YAXAAHHQAY0BJ @ D1QAY0DC @ DQAY0BA @ D @ Z), на который ссылается функция _main

мой новый код выглядит как

<code>void deletePerson(int &, int, char[][25], char[][25], char[][50], char[][16]);
int main()
{
char firstNames[100][25], lastNames[100][25], email[100][50], phone[100][16];
else if (userChoice == 'D')
        {
            deletePerson(count, amount, firstNames,lastNames,email,phone);
        }
}
void deletePerson(int count, int amount, char firstNames[100][25], char lastNames[100][25],char email[100][50],char phone[100][16])
{
    int position; //the place where the person is in the array
    position = searchName(count, amount, lastNames);
    if (position != -1)
    {
    }</p>

<p>}

Ответы [ 2 ]

2 голосов
/ 29 ноября 2010

Я думаю, вам следует избегать использования массивов символов и указателей символов. Вместо этого используйте std::vector и std::string, они избавят вас от многих проблем. std::vector<std::string> это, вероятно, все, что вам нужно. Или, что еще лучше, вы должны объединить firstName, lastName, электронную почту и телефон в структуру.

struct Person
{
    std::string firstName;
    std::string lastName;
    std::string email;
    std::string phone;
}

void deletePerson(std::vector<Person>& persons)
{
    int position = searchName(lastNames); // you could replace this with std::find
    if (position != -1)
    {
    }
}
0 голосов
/ 29 ноября 2010

Попробуйте это:

Он использует вывод аргумента шаблона и ссылки для упрощения вещей. Это работает, если вы по какой-либо причине измените размеры своих массивов, не меняя функции (и, возможно, логику).

template<class T, int N1, int N2, int N3, int N4, int N5, int N6, int N7, int N8>
void deletePerson(int &, int, T(&r1)[N1][N2], T(&r2)[N3][N4], T(&r3)[N5][N6], T(&r4)[N7][N8]){} 

int main() 
{ 
   char firstNames[100][25], lastNames[100][25], email[100][50], phone[100][16]; 
   int count = 100;
   deletePerson(count, 20, firstNames, lastNames, email, phone); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...