2016-06-28 2 views
-3

Может кто-нибудь объяснить мне, что я делаю неправильно с синтаксисом ниже? В моем учебнике нет примеров пользовательских строковых функций, и я не могу понять, что я должен делать. Заранее спасибо!Синтаксис определения функции строки

#include <iostream> 
#include <cmath> 
#include <cstdlib> 
#include <string> 

string dayOfWeek(int day); 

using namespace std;  

int main() 
{ 
    cout << "Please enter a day of week (0 for Sunday, 1 for Monday, etc): "; 
    cin >> day; 
    cout << "The name of the day of the week is: " dayOfWeek(day) << endl; 
} 

string dayOfWeek(int day) 
{ 
    if (day == 0) 
     return "SUNDAY"; 
    else if (day == 1) 
     return "MONDAY"; 
    else if (day == 2) 
     return "TUESDAY"; 
    else if (day == 3) 
     return "WEDNESDAY"; 
    else if (day == 4) 
     return "THURSDAY"; 
    else if (day == 5) 
     return "FRIDAY"; 
    else if (day == 6) 
     return "SATURDAY"; 
} 
+1

Ваш код не является полным (у вас есть хотя бы несколько строк). Сообщите, пожалуйста, об ошибке/проблеме. – Xiobiq

+2

Вам нужно разместить минимальный, полный и проверенный пример. http://stackoverflow.com/help/mcve – chema989

+1

Это даже не компилируется ... –

ответ

2
#include <string> 
#include <iostream> 

std::string dayOfWeek(int day) 
{ 
    if (day == 0) 
     return "SUNDAY"; 
    else if (day == 1) 
     return "MONDAY"; 
    else if (day == 2) 
     return "TUESDAY"; 
    else if (day == 3) 
     return "WEDNESDAY"; 
    else if (day == 4) 
     return "THURSDAY"; 
    else if (day == 5) 
     return "FRIDAY"; 
    else if (day == 6) 
     return "SATURDAY"; 

    return "Invalid input!"; // May be you should guarantee a return value. 
} 

int main() { 
    std::cout << dayOfWeek(5) << std::endl; 
} 

должны работать, как ожидалось.

2

Суть проблемы здесь:

string dayOfWeek(int day); 

using namespace std; 

using после кода, который зависит от него, так что компилятор идет искать string и не может найти его. Он не ищет std :: string, потому что пока еще не сказано.

Вы можете переместить using вверх несколько строк, но по многим причинам, охватываемым в ответах на Why is "using namespace std" considered bad practice? и несколько не охвачены, вы, вероятно, лучше не положить

using namespace std; 

в коде вообще. Префикс std:: явно, и вы можете избежать множества неприятных сюрпризов.

Я также рекомендую следовать примеру @ πάνταῥεῖ, где была помещена функция. Вперед декларирование, а затем объявление дает вам два места, чтобы изменить код и еще одно место, чтобы иметь ошибку. Объявление функции впереди, где она будет использоваться, означает, что вам нужно изменить только одно объявление.

Собираем все вместе с несколькими другими мелкими ухищрений:

#include <string> 
#include <iostream> 

std::string dayOfWeek(int day) 
{ 
    switch (day) // for stuff like this, I like a switch. I find it looks nicer. 
    { 
     case 0: 
      return "SUNDAY"; 
     case 1: 
      return "MONDAY"; 
     case 2: 
      return "TUESDAY"; 
     case 3: 
      return "WEDNESDAY"; 
     case 4: 
      return "THURSDAY"; 
     case 5: 
      return "FRIDAY"; 
     case 6: 
      return "SATURDAY"; 
     default: 
      return "No such day"; // functions must always return something. 
            // in this case what will cout print if you 
            // don't return a string? Don't know? 
            // Don't feel bad. Neither do I. 
            // Welcome to Undefined Behaviour 

    } 
} 

int main() 
{ 
    int day; //this was missing 
    std::cout << "Please enter a day of week (0 for Sunday, 1 for Monday, etc): "; 
    std::cin >> day; 
    std::cout << "The name of the day of the week is: " << dayOfWeek(day) << std::endl; 
} 

Там еще одна уловка, которую Вы можете использовать, чтобы избавиться от if или switch полностью

#include <string> 
#include <iostream> 


// define an array of days of the week to print. const means dayOfWeek cannot be changed 
const std::string dayOfWeek[] = 
{ 
    "SUNDAY", 
    "MONDAY", 
    "TUESDAY", 
    "WEDNESDAY", 
    "THURSDAY", 
    "FRIDAY", 
    "SATURDAY" 
}; 

int main() 
{ 
    unsigned int day; 
    //Note unsigned int. Negative numbers are now disallowed 

    std::cout << "Please enter a day of week (0 for Sunday, 1 for Monday, etc): "; 

    // keep looping until user provides a good number 
    while (!(std::cin >> day) // user MUST input a number 
      || day > 6) // number is a usable number 
    { 
     std::cin.clear(); // clean up bad input 
     std::cout << "Please enter a day of week (0 for Sunday, 1 for Monday, etc): "; 
    } 
    // since we know day is a usable (0..6) number we can read the day out of the array 
    std::cout << "The name of the day of the week is: " << dayOfWeek[day] << std::endl; 
} 
+1

Другие проблемы не включают '<<' перед использованием функции 'dayOfWeek', no определение «день». –

+0

Чувствуйте fre, чтобы включить этот пример кода компиляции: http://ideone.com/XMxc03 –

+0

Не видел этого.Отсутствие «дня» может испортить всю неделю. – user4581301

Смежные вопросы