Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Tiami
Яростный кот
43 / 1 / 7
Регистрация: 10.03.2009
Сообщений: 220
#1

Что опять не так в функции? - C++

30.03.2009, 12:34. Просмотров 1504. Ответов 26
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
void power(char='*',int=1,float=7);
int main()
{
    cout<<power('*');
    cout<<power(34.51);
    cout<<power(37);
    cout<<power();
}
void power(char ch,int x,float y)
{
                     for(int j=1;j<50,j++)
                     cout<<ch;
}

http://www.cyberforum.ru/cpp-beginners/thread2247755.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2009, 12:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что опять не так в функции? (C++):

Ошибки в функции что не так?
#include &lt;iostream&gt; using namespace std; int fadd(int,int); int...

Что-то не так с аргументами функции
Возникла проблема с функцией calcpath. Ошибки следующего характера: |error:...

Ошибки в функции что не так?
#include &lt;iostream&gt; using namespace std; long int hms_to_secs(long int,long...

Что не так в этой функции?
Подскажите что не так в этой функции, понимаю что что-то с передачей массива из...

Найти решение заданной функции. Что делаю не так?
Что делаю не так? Найти решение заданной функции, используя циклы &quot;for&quot;,...

26
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 12:42 #2
Т.к. у тебя все параметры в функции используются по умолчанию, то вызов функции с одним аргументом всегда заменяет только первый параметр...
соответственно, power(32.51); сругается на ощибку, ибо компилятор не может преобразовать double к char
1
Deicider
96 / 52 / 3
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 12:42 #3
Tiami, всё не так.

Ты объявляешь функцию с тремя параметрами, а когда вызываешь, передаешь только один, притом еще разных типов, или вообще не передаешь ничего.
Второе: чтобы задать значения параметров по умолчанию, нужно в объявлении функции написать имена переменных:
void power(char ch='*', int x=1, float y=7);

Вызывая такую функцию, можно будет передавать значения только типа char для первого параметра, int для второго и float для третьего. Ты же передаешь разные типы для первого параметра.
Третье: функция не возвращает значения (объявлена как void), но ты пытаешься вывести на экран возвращаемое значение ( cout<<power() ), которого не существует.

И еще одно замечание: ты в функции не используешь, ни x, ни y. зачем они тогда нужны? ))))
1
Humanitis
175 / 167 / 27
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 12:43 #4
Цитата Сообщение от Tiami Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
void power(char='*',int=1,float=7);
int main()
{
    cout<<power('*');//power('*',1,7)
    cout<<power(34.51);//power(char(34.51),1,7)
    cout<<power(37);//power(char(37),1,7)
    cout<<power();//power('*',1,7)
}
void power(char ch,int x,float y)
{
                     for(int j=1;j<50,j++)
                     cout<<ch;
}
Перегружай функцию
1
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 12:45 #5
Deicider полностью прав ))
1
Deicider
96 / 52 / 3
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 12:50 #6
Цитата Сообщение от Humanitis Посмотреть сообщение
Перегружай функцию
Даже если перегружать, то тоже осторожно использовать надо, так как при передаче в функцию целого числа со значением от 0 до 255, оно по сути может соответствовать и типу char, и int, и float, а свыше 255 до (не помню точно какого ), может быть как int и float.
0
Tiami
Яростный кот
43 / 1 / 7
Регистрация: 10.03.2009
Сообщений: 220
30.03.2009, 12:52  [ТС] #7
Странно а я думал функция автоматически определяет тип аргумента....
0
Deicider
96 / 52 / 3
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 12:53 #8
Цитата Сообщение от Tiami Посмотреть сообщение
Странно а я думал функция автоматически определяет тип аргумента....
Она-то определяет, но я пишу про то, что есть значения, которым может соответствовать несколько типов.
0
Tiami
Яростный кот
43 / 1 / 7
Регистрация: 10.03.2009
Сообщений: 220
30.03.2009, 12:54  [ТС] #9
Цитата Сообщение от Humanitis Посмотреть сообщение
#

#include <iostream>

#

using namespace std;

#

void power(char='*',int=1,float=7);

#

int main()

#

{

#

cout<<power('*');//power('*',1,7)

#

cout<<power(34.51);//power(char(34.51),1,7)

#

cout<<power(37);//power(char(37),1,7)

#

cout<<power();//power('*',1,7)

#

}

#

void power(char ch,int x,float y)

#

{

#

for(int j=1;j<50,j++)

#

cout<<ch;

#

}
Пишет одну ошибочку:
1. expected `;' before ')' token
0
Humanitis
175 / 167 / 27
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 12:55 #10
Deicider, Думаю тут не будет проблем при перегрузке.
Литерал 0..255 по умолчанию будет типом int
Литерал записанный в кавычках,будет типом char
и соответсвенно для float,записанный через точку.

Другое дело если мы будем подставлять в функцию типы отличные от перечисленных.
например short int или double
0
Tiami
Яростный кот
43 / 1 / 7
Регистрация: 10.03.2009
Сообщений: 220
30.03.2009, 12:57  [ТС] #11
Цитата Сообщение от Haster Посмотреть сообщение
Т.к. у тебя все параметры в функции используются по умолчанию, то вызов функции с одним аргументом всегда заменяет только первый параметр...
соответственно, power(32.51); сругается на ощибку, ибо компилятор не может преобразовать double к char
Я думал она сразу приравняет к типу float))
0
Deicider
96 / 52 / 3
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 13:03 #12
Сейчас задумался над своим сообщением насчет типов. А можно ли целое число без запятых перепутать с float? Или если нет запятой, то это точно будет int? подскажите, кто знает! ))

Насчет char и int всё что я написал остается в силе, так как char это однобайтовая целочисленная беззнаковая переменная.

Добавлено через 2 минуты 56 секунд
Tiami,
Может быть тут проблема: for(int j=1;j<50,j++). Нужно через ; записывать.
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 13:03 #13
Есть схема, которой следует компилятор при работе с типами...
Как я помню, тип float по умолчанию не приводится к типу int....
При всех операциях тип char автоматически расширяется до int...
float до double....

А вот преобразование int во float осуществляется без проблем, т.к. не связано с потерей точности
0
Humanitis
175 / 167 / 27
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 13:21 #14
Цитата Сообщение от Haster Посмотреть сообщение
При всех операциях тип char автоматически расширяется до int...
float до double....
этож с чего вдруг?
0
Deicider
96 / 52 / 3
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 13:28 #15
Цитата Сообщение от Tiami Посмотреть сообщение
Я думал она сразу приравняет к типу float))
Она не приравняет к типу float, потому что первый параметр имеет тип char.
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 13:49 #16
Цитата:
Сообщение от Haster Посмотреть сообщение
При всех операциях тип char автоматически расширяется до int...
float до double....
этож с чего вдруг?
Это лучше у Страуструпа спросить )))
Но если есть выражение:
char t;
t = t+1;
то t автоматически расширяется до типа int, к числу прибавляется 1, а потом выражение усекается опять до char (при присваивании)
0
Humanitis
175 / 167 / 27
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 13:51 #17
Цитата Сообщение от Haster Посмотреть сообщение
t = t+1;
то t автоматически расширяется до типа int, к числу прибавляется 1, а потом выражение усекается опять до char (при присваивании)
это потому ,что 1 считается литералом типа int,поэтому и идет продвижение char до int.
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 13:53 #18
Хорошо, не удачный пример взял )))
Допустим:
char t = '0';
t = t+ '1';
в данном случае опять же t расширяется до int, '1' тоже до int, выполняется вычисление, а затем результат опять переводится в char
0
Humanitis
175 / 167 / 27
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 14:01 #19
Ну может я и ошибаюсь.
Но я всегда думал,что тип char и тип int будут расширятся до того размера с которым удобнее оперировать системе,т.е. в 16-разрядной до слова,в 32-х до двойного слова.
Однако не факт ,что тип int будет равен 32 битам в 32 разрядной системе.
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 14:05 #20
Не помню где я это вычитал, у Страуструпа или у Айрона Пола, но там было написано, что всегда типы char и short расширяются до int
0
30.03.2009, 14:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2009, 14:05
Привет! Вот еще темы с решениями:

Что не так в функции? Написать функцию вставки элемента в массив
Здравствуйте. Вообщем что то запутался, много вариантов уже перебрал. Вроде где...

Нужно экспертное мнение! Что рациональнее!? почему так работают функции?!
Привет всем!:) Возникли небольшие непонятки с функциями которые вычисляют...

Функции(опять передача результатов выполнения)))
Есть массив элементов. Нужно реализовать функцию удаления элемента по поиску...

При решении программа выдаёт значение функции, равное 0 или выдаёт ошибку. Что не так?
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; using namespace std;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru