2014-01-09 16 views
-1

Привет, я все еще новичок в C++, и я застрял :(Как передать массив объектов класса функции? Я думал, что вам нужно объявить тип и имя массива в прототипе функции, поэтому я написал " INT _displayinfo (подробности класса пользователь []);»и в функции позвонит должен был написать имя массива и количество массивов []Как передать массив объектов класса функции?

#include "stdafx.h" 
#include <iostream> 
#include <string> 

using namespace std; 

int _input(); 
int _displayinfo(class details user[]); 

class details 
{ 
public: 
    string name; 
    int age; 
}; 

int _input() 
{ 
    class details user[3]; 
    for (int i = 0; i < 2; i++) 
    { 
     cout << "Enter the name:"; 
     cin >> user[i].name; 
     cout << "Enter age:"; 
     cin >> user[i].age; 
    } 
    return 0; 
} 

int _displayinfo(details user[]) 
{ 
    for (int i = 0; i < 2; i++) 
    { 
     cout << "User " << i << user[i].name << endl; 
    } 
    return 0; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    _input(); 
    _displayinfo(details user[]); 

    return 0; 
} 
+0

Это дает вам ошибку компиляции? Если так, то, что это? – interjay

+2

В C++ у вас есть много объектов библиотеки, которые вы можете использовать в качестве контейнеров: например. 'std :: vector',' std :: set'. Они основаны на шаблонах, хотя это может занять некоторое время, чтобы привыкнуть. Но стоит потратить время, чтобы понять их. – Bathsheba

+2

Большинство ваших проблем не имеют никакого отношения к содержимому массива. Начните с массивов примитивных типов и сначала поймите их. – molbdnilo

ответ

0

Слишком долго комментировать на английском ваш плохой код, поэтому будет лучше, если я просто переписал его. Я не проверяю, что вход действителен. (Испытания WIthout)

#include "stdafx.h" 
#include <iostream> 
#include <string> 

struct details 
{ 
    std::string name; 
    int age; 
}; 

void input(details user[], size_t n) 
{ 
    for (size_t i = 0; i < n; i++) 
    { 
     std::cout << "Enter the name: "; 
     std::cin >> user[i].name; 
     std::cout << "Enter age: "; 
     std::cin >> user[i].age; 
     std::cout << std::endl; 
    } 
} 

void displayinfo(const details user[], size_t n) 
{ 
    for (size_t i = 0; i < n; i++) 
    { 
     std::cout << "User " << i << ": " << user[i].name 
        << " is " << user[i].age << " years old." << std::endl; 
    } 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    const size_t N = 3; 
    details user[N]; 

    input(user, N); 
    displayinfo(user, N); 

    return 0; 
} 
+0

Чем ты Влад! :) – user3178205

0

кажется, что это может быть вашей проблемой

_input(); 
_displayinfo(details user[]); 
.

Пользовательский массив на данный момент не существует. Если это так, вы должны передать только имя, например

_displayinfo(user); 
+0

Хорошо, что вызов функции - это просто недействительный синтаксис. –

0

Простой способ:

int _displayinfo(const details* user, int size) 

, как int _displayinfo(details user[]) распадается на int _displayinfo(details* user)

Другим способом является написать:

int _displayinfo(const details (&user)[3]) 

Другим способом является использование std::vector<details> или std::array<details, 3>

и так написать:

int _displayinfo(const std::vector<details>& user) 
int _displayinfo(const std::array<details, 3>& user) 

Примечание: добавить const как вы не изменить массив внутри _displayinfo.

Смежные вопросы