2013-11-15 5 views
-1

Я работаю в классе под названием Служащий, и я пытаюсь создать конструктор, который принимает массив в качестве параметраПасс ссылки на массив объектов

class Employee 
{ 
Employee * array[9]; 
public: 
Employee(Employee * arr[]); 
} 

Но это не будет работать, так что я м думая о передаче по ссылке arr, за исключением того, что я не могу просто добавить & до arr ... Любые идеи? Благодаря

+0

Используйте 'std :: vector'./end thread –

+2

«... который принимает массив как параметр». Массив * what * ?? Ваш член - это массив указателей, в то время как вы являетесь параметром, является простым указателем (при условии, что вы исправили неповторимую синтаксическую ошибку закрытия ')'). В лучшем случае ваш вопрос неясен. – WhozCraig

+1

Почему бы не работать? По умолчанию массивы передаются по ссылке *. Но имеют ли объекты Employee действительно массивы объектов Employee в качестве членов? Вы уверены, что ваш дизайн верен? – EJP

ответ

0

Если вы хотите передать массив типа Employee, то вы

Employee (Employee arr[]) или Employee (Employee * arr)

Если вы хотите, чтобы передать ему массив указателей на объекты Employee, то вы

Employee (Employee * arr[]) или Employee (Employee ** arr)

Th ese все будет работать.

Кроме того, массивы всегда передаются по ссылке.

0

Если вы ищете, чтобы передать массив, вы также должны пройти в размере:

class Employee 
{ 
public: 
    Employee(Employee* pE, std::size_t size) { ... } 
}; 

Так как вы будете понижения массива в указатель, и в противном случае есть не знаю, как размер. Когда вы передаете указатель, ему не нужно передавать его по ссылке, так как вы можете изменить значение элементов и указывать на то же место в памяти (то есть оно не будет отличаться от передачи по ссылке).

Было бы лучшее решение использовать либо std::array или std::vector, хотя:

class Employee 
{ 
public: 
    Employee(const std::vector<Employee>& vec) { ... } 
}; 

Side Примечание: Я не знаю, почему у вас есть объект Employee, который принимает массив сотрудников, чтобы построить его. Это похоже на проблему дизайна.

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