#c
#c
Вопрос:
Я пытаюсь самостоятельно изучить C и пробовал это. У меня есть структура, один из элементов которой является массивом других структур. У меня есть вопрос об альтернативной нотации.
Структуры, которые я определил, являются
struct employeeRecordT {
string name;
string title;
string ssnum;
double salary;
int withholding;
};
struct payrollT {
int num;
employeeRecordT *array;
} payroll;
Я выделяю память для расчета заработной платы, используя следующую конструкцию
payroll.array = new employeeRecordT[payroll.num];
где payroll.num указывает количество элементов в массиве. Я могу получить доступ к имени элемента employeeRecordT, используя обозначение массива, например
payroll.array[i].title
Я хотел знать, как получить к этому доступ, используя обозначение указателя, я пытался
payroll.(array i)->name = "Vikas";
и я получаю следующее сообщение об ошибке от g
toy.cc:30:13: ошибка: ожидаемый неквалифицированный идентификатор до ‘(‘ токен toy.cc:30:14: ошибка: ‘array’ не был объявлен в этой области
Я пытаюсь понять, что я должен использовать и почему? Не могли бы вы, ребята, помочь объяснить.
Заранее спасибо.
С уважением, Викас
Ответ №1:
(payroll.array i)->name = "Vikas";
array
является членом payroll
, поэтому, когда вы выполняли payroll.(array i)
, обозначение в скобках (т. Е. «сделай это первым») пыталось использовать переменную array
, а не ту, которая находится в области payroll
.
Конечно, при использовании C лучшим решением является Neils. По возможности используйте std::vector вместо вашего собственного динамически выделяемого хранилища.
Комментарии:
1. Попробовал то, что вы рекомендовали, и это работает. Я должен был подумать об этом. Оглядываясь назад, это кажется очевидным. Я согласен как с Нилом, так и с вами, что я должен использовать vector (и вообще использовать STL везде, где это возможно). Я делал это просто для обучения.
Ответ №2:
Если это причиняет боль, не делайте этого. Вместо этого используйте std::vector ваших структур.
Комментарии:
1. -1: Когда люди задают действительно некорректный вопрос, который показывает, что они перескочили к реализации, прежде чем задуматься о дизайне, все в порядке, и хорошо давать советы высокого уровня. Но, честно говоря, это был точный и специфичный вопрос с простым прямым ответом, не нужно вешать лапшу на уши парню за то, что он задал этот вопрос.