2012-06-10 3 views
2

я хочу изменить мой переменной передается в качестве аргумента этой функции:C++ переменная аргумент Функция изменения в

bool verifyStudent(string id, string name, int grade, int points, string type) { 
if(!verifyId(id)){ 
    cerr << "Please enter 8 charactes id! format: YYMMDDCC\n"; 
    cin >> id; 
    return false; 
} else 
if(!verifyName(name)){ 
    cerr << "Please enter name to 35 characters!\n"; 
    cin >> name; 
    return false; 
} else 
if(!verifyGrade(grade)){ 
    cerr << "Please enter class between 8 and 12!\n"; 
    cin >> grade; 
    return false; 
} else 
if(!verifyPoints(points)){ 
    cerr << "Please enter points between 0 and 300!\n"; 
    cin >> points; 
    return false; 
} else 
if(!verifyType(type)){ 
    cerr << "Please enter 1 charater type! format: R,r - regional, D,d - district, N,n - national, I,i - international\n"; 
    cin >> type; 
    return false; 
} else { 
    return true; 
} 

}

, как я должен получить доступ к данной переменной и изменить его, когда он не проверяется другой функцией?

вот так, как я вызвать функцию:

verifyStudent(iId, iName, iGrade, iPoints, iType); 
+0

Хотя я с радостью отвечаю на эти вопросы, считайте, что это базовое знание C++, которое можно найти и изучить в любых книгах или учебниках в первых главах/уроках. – Vincent

+0

Каждый вызов 'verifyStudent' позволяет исправлять не более одного значения и не проверяет исправление, поэтому, надеюсь, вы вызываете его в цикле ala' while (! VerifyStudent (iId, iName, ...))); ', но тогда в реалистичных системах хорошо иметь возможность для них отменить операцию, если они понимают, что у них нет всей информации, и т. д. –

+0

Возможный дубликат [Когда я изменяю параметр внутри функция, тоже ли она изменяется для вызывающего?] (http://stackoverflow.com/questions/1698660/when-i-change-a-parameter-inside-a-function-does-it-change-for- заместитель вызывающего абонента тоже) –

ответ

8

Для того, чтобы изменить аргументы, вы должны принять ссылки:

bool verifyStudent(string& id, string& name, int& grade, int& points, string& type) 

Хотя я бы сказал, что функция нет проверкаStudent целых проверкаAndCorrectStudentIfNeeded.

2

Сообщений:

Таким образом, C++, имеет два передачи параметров механизмов, вызов по значению (как в Java) и вызвать посредством ссылки. Когда параметр передается с помощью ссылки , функция может изменять оригинал. Вызов по ссылке , определяемый по типу параметра &.

Вот типичная функция, которая использует преимущество вызова посредством ссылки [...]

недействительных подкачки (Int & а, Int & б) {[...]}

More here -> A3.5. Functions