2016-11-15 5 views
0

Я не могу получить «полный» , чтобы отобразить конкатенацию First и last. Он компилируется, но когда я запустил его, он будет пустым. Можете ли вы сказать мне, почему? Пытались найти его часами.Может кто-нибудь сказать мне, почему моя строка пуста после передачи аргумента?

Вот мое declerations

#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 

#define tax 0.30 
#define parking_deductions 10.00 
#define overtime_hours 40 
#define max_hours 60 
#define max_pay 99 
string namestring(string first, string last, string full); 

Я пытаюсь передать этот модуль для моего основного

string namestring(string first, string last, string full) 
{ 
    //input name 
    cout << "What is your first name? " << endl; 
    cout << "first name: " << endl; 
    cin >> first; 

    cout << "What is your last name? " << endl; 
    cout << "last name: " << endl; 
    cin >> last; 

    //process name 
    full = last + " " + first; 
    return full; 
} 

Называя это как так

namestring(first, last, full); 

Где я ожидаю, что полное имя пользователя, которое будет отображаться ниже

 cout << left << fixed << "   " << "Reg." << " " << "  Ovt." << " Hourly" << " Net" << " " << "    Gross" << endl; 
    cout << left << fixed << setprecision(2) << setw(10) << "Name    " << " Hours" << " Hours" << " Rate" << "  Pay" << " Taxes" << "  Deduct" << " Pay" << endl; 
    cout << left << fixed << setprecision(2) << setw(10) << "====================" << " " << "=====" << " " << "=====" << " " << "=====" << " " << "======" << " " << "======" << " " << " " << "========" << " " << "=======" << endl; 
    cout << left << setprecision(2) << setw(20) << full << right << " " << right << setw(4) << hours << right << " " << right << overtime << " " << right << pay << " " << right << net_pay << " " << right << taxs << " " << right << parking_deductions << "  " << right << gross_pay << right << endl; 
    cout << endl; 
    cout << endl; 
+1

Здесь недостаточно кода, чтобы узнать, в чем проблема. Предполагая, что вы вызываете 'cout << namestring (« Dr »,« Z »,« ») << endl;' он будет работать нормально; однако, если вы пытаетесь использовать параметр, переданный в 'namestring', это не будет. Пожалуйста, отредактируйте свой вопрос, чтобы включить соответствующий код вызова, а также позвоните здесь: a ** [mcve] ** – Tas

+0

Пожалуйста, также вызовите вызов функции. Тогда мы сможем выяснить проблему. –

+0

Ваш код не проверяет, действительно ли входы работают. Кроме того, не используйте 'std :: endl', если вам действительно не нужно очищать поток: в коде выше поток будет автоматически очищаться при использовании' std :: cin' ('std :: cout' is' tie () 'd в' std :: cin'). –

ответ

1
string namestring(string first, string last, string& full) 
//input name 
{  
    cout << "What is your first name? " << endl; 
    cout << "first name: " << endl; 
    cin >> first; 

    cout << "What is your last name? " << endl; 
    cout << "last name: " << endl; 
    cin >> last; 

    //process name 
    full = last + " " + first; 
    return full; 
} 

Вы пропусканием full по значению. Так что это локальная копия функции, которая была изменена. Вам нужно, чтобы он прошел по ссылке. Если вы также хотите получить первое и последнее значение, вам также необходимо передать его по ссылке.

2

Я предполагаю, что цель здесь, чтобы получить следующие 3 строки,

First Name 
Last Name 
Full Name 

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

void namestring(string& first, string& last, string& full) 
{ 
    //input name 
    cout << "What is your first name? " << endl; 
    cout << "first name: " << endl; 
    cin >> first; 

    cout << "What is your last name? " << endl; 
    cout << "last name: " << endl; 
    cin >> last; 

    //process name 
    full = last + " " + first;; 
} 

Также нет необходимости возвращать строку, если вы передаете «полную» строку по ссылке, так как функция заполнит ее для вас.