Stefan_Lang
1. вы используете STL
классы, в данном случае cout
, но не определил, чтобы use
это пространство имен. Все классы STL находятся в пространстве имен 'std
- и таким образом должен быть использован либо с ... std::
- префикс, или вы должны добавить строку
using std;
где-то перед вашим кодом.
2. тип
char
вы использовали для переменных '
name
' и '
stream
- это всего лишь один символ, а не строка, как вы, кажется, намеревались. В языке Си вы можете использовать массив символов или выделить такой массив из памяти во время выполнения и указать на него с помощью переменной указатель-символ для хранения адреса. Поскольку вы уже используете STL, я предлагаю использовать
string
класс оттуда же,
std::string
.
3. это всего лишь предположение, но имя переменной '
stream
'невероятно близок к некоторым символам, которые уже определены в
std::
(например.
istream
,
ostream
,
fstream
). Если вы хотите убедиться, что не получаете столкновений имен между символами, используемыми внутри
std
, то, вероятно, лучше не прибегать ко второму варианту, предложенному в 1., выше. Вместо префикса все символы из
std
с '
std::
- ...Это действительно включает в себя ...
cout
- который вы использовали в
main()
.
4. первые объявления в вашем классе,
student
все они определены как частные. То есть по умолчанию в
class
.
getdata()
поэтому он также является частным, что, вероятно, не имеет большого смысла - вам нужно объявить его общедоступным, чтобы сделать его доступным из
main()
.
5. Параметры, передаваемые
getdata
доступны только для чтения! Термин "получить", кажется, указывает на то, что вы хотите
читать свойства из вашего объекта student в переменные, передаваемые этой функции, но, если это ваше намерение, то вам нужно передать переменные
по ссылке, нет
по значению Например, вот так:
void getdata(int& R, std::string& N, std::string& S)
Тем не менее, то, как вы называете
getdata()
от главного, кажется, указывает на то, что вы хотите использовать его для
*набор* свойства студента, а не
*получить* данные, хранящиеся внутри!?
Вопрос в том, является ли ваш
задача чтобы определить
*набор* метод, а не а
*получить* метод, в этом случае ваш метод был просто неправильно назван, но подпись была технически правильной (кроме строковых типов). Обратите внимание, однако, что хотя это нормально передавать переменную встроенного типа, такого как int (или char) по значению, вместо этого вы должны передавать составные типы по ссылке const:
void setdata(int R, const std::string& N, const string& S)
6. Как уже отмечалось, задания в
getdata()
перевернуты (но они верны, если вы действительно пытались написать
*набор* функция)
7. в
displaydata()
, не используйте '
\n
- в цепочке, к которой ты переходишь.
cout
. Эффект управляющих символов может зависеть от операционной системы! Вы можете вывести символ
std::endl
вместо этого, вот так:
std::cout << "Information" << std::endl;
Да, '
\n
будет отлично работать на большинстве ОС, и
std::endl
это дольше писать. Но с другой стороны, это не так уж много дополнительных усилий для того, чтобы сделать программу переносимой на любую ОС, даже ту, которая еще не существует.
8. функция
main()
может иметь только одну из двух подписей:
int main()
или
int main(char argc, char *argv[])
Любая другая сигнатура является ошибкой, хотя многие компиляторы принимают ее без предупреждения. Не все, однако! Так что, по крайней мере, сделайте возвращаемый тип
int
.
9. Как указано выше, вы, видимо, пытаясь использовать свой
*получить* функция к
*набор* значения вашего объекта student. Было ли это вашим намерением, и соответствовало ли это поставленной перед вами задаче, или нет? Если используется для получения данных, то, очевидно, вы не можете передавать прямые значения, вместо этого вы должны использовать переменные, которые вы определяете внутри
main()
, который затем будет содержать данные, возвращаемые
getdata()
В противном случае, передавая целочисленную константу, такую как
112
это нормально, но чтобы определить строковые константы, вам нужно заключить текст строки в двойные кавычки, например так:
s1.setdata(112, "Raoul", "Science");
10. Ваша функция
displaydata()
не печатает никаких данных
student
информация по мере необходимости, только постоянная строка. Вы также должны вывести переменные-члены student.
Тем не менее, мне потребовалось бы гораздо меньше усилий, чтобы просто переписать программу, но суть задачи, которую вам дали, заключается в том, чтобы изучить соответствующие концепции, и я надеюсь, что мои объяснения могут помочь в этом отношении.
Если все остальное не удается, помните, что компьютер-это очень, очень тупой "человек", хотя и довольно быстрый. Оно будет
буквально делайте то, что вы говорите, и, возможно, не получите никаких последствий, которые вы принимаете как должное, когда разговариваете с реальным человеком.