2013-05-08 3 views
1

im новое для программирования на C++, однако я сделал некоторое программирование в java, поэтому я не совсем новичок в программировании OO.преобразование из нескалярного типа запрашивается

То, что я пытаюсь сделать, это создать структуру, а затем массив объектов этой структуры. Я пытаюсь сохранить этот массив всегда отсортированным (используя сортировку новичков), поэтому я определяю структуру, а затем создаю массив [50] этой структуры и помогая переменной этой структуры. Тогда каждая новая запись разных переменных (имя, фамилия, оценки и т. Д.) Я получаю от пользователя, который я помещаю в вспомогательную переменную. Затем, когда пользователь заканчивает ввод всех данных в вспомогательную переменную, я продолжаю и выясняю, в какой позиции в массиве должен быть установлен этот объект.

Вот пример кода, старайтесь держать его как можно более простым.

struct student { 
    //declaring variables that student should have 
}; 

student students[50]; 
int numOfStud=0; 

while (a=='y' && numofStud<50) { //a=='y' just means user wants to add more students 
    student input= new student; 
      //adding various data to student  
      //adding input into an array of students using variation of insertion sort algorithm 
cout << "want to add more students?"; 
cin >> a; 
} 

Когда я пытаюсь скомпилировать это я получаю ошибки в student input= new student. Поэтому я немного смущен.

Отключить тему: Также у меня есть вопрос о том, что происходит, когда вы делаете, например, students[0]=input; Я создаю другую копию объекта здесь, или я просто создаю другой указатель (например, в java), и поэтому оба ученика [0] и ввод будет указывать на тот же объект?

Спасибо за помощь, ребята!

ответ

6

Успешный вызов new T возвращает указатель на динамически распределяемой T объекта, так что вы пытаетесь создать экземпляр student от указателя student здесь:

student input= new student; 

Вам просто нужно

student input; 

Когда вы сделаете

students[0]=input; 

вы присваиваете значение input экземпляру student, который находится в students[0]. Таким образом, students[0] и input будут разными объектами.

+0

Удивительный, это очистило его для меня. Еще раз спасибо. : D Также спасибо всем остальным ответам. –

2

Ключевое слово new предназначено для выделения памяти на куча с использованием указателей. Вам нужно только

student input; 
// fill "input" with data 
Смежные вопросы