Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Kseni1995
0 / 0 / 0
Регистрация: 03.05.2014
Сообщений: 29
#1

Error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>" - C++

06.05.2014, 12:57. Просмотров 1289. Ответов 11
Метки нет (Все метки)

С++ Не работает программа! Задание было такое: напишите программу invert(p,x,n), возвращающую значение х с инвертированными n-битами, начиная с позиции p ( остальные биты не меняются).

Ввожу, подчеркивает bitset и выдает такую ошибку:
]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
1> error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>"
1> with
1> [
1> _Bits=32
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно.

Мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <bitset>
using namespace std;
unsigned
invert(unsigned x, int p, int n)
{
    int count = sizeof(x) * 8;
    unsigned t = ((unsigned) ~0 << (p - 1)) >> (count - n) << (count - n - p + 1);
    return (~x & t) | (x & ~t);
}
 
int
main()
{
    unsigned x;
    int p, n;
    cout << "Введите x в шестнадцатеричной: ";
    cin >> hex >> x;
    cout << "Введите p позицию и число инвертированных битов n ";
    cin >> dec >> p >> n;
    cout << "Исходный x " << bitset<sizeof(x) * 8>(x) << endl
         << "Инвертированный x " << bitset<sizeof(x) * 8>(invert(x, p, n)) << endl;
    return 0;
}
Подскажите! В чем дело?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2014, 12:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>" (C++):

Как исправить ошибку невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int []"? - C++
Ребят, срочно прошу вас помочь.. Есть ошибка (невозможно преобразовать аргумент 1 из &quot;unsigned int&quot; в &quot;unsigned int &quot;) как ее...

Что делать с ошибкой: C2440: инициализация: невозможно преобразовать "int **" в "int *" - C++
Задание, сделать класс динамического массива шаблонным. Вот, вроде бы сделал, но наткнулся на ошибку, что не так? Код: ...

Error C2440: инициализация: невозможно преобразовать "void *" в "listnode *". подскажите, что можно сделать? - C++
#include &lt;iostream&gt; struct listnode { char *data; int value; struct listnode *next; }; struct listnode...

Error C2440: =: невозможно преобразовать "void *" в "Node *" - C++
Почему ошибка? error C2440: =: невозможно преобразовать &quot;void *&quot; в &quot;Node *&quot; #include &lt;stdio.h&gt; #include &lt;ctype.h&gt; #include...

Невозможно преобразовать "unsigned int" в "output::book_origin" - C++
Помогите как исправить данную проблему Серьезность Код Описание Проект Файл Строка Ошибка C2440 =: невозможно преобразовать &quot;unsigned...

Error C2440 невозможно преобразовать "void *" в "char * - C++
Уважаемые форумчане. Не могу понять почему ему не нравятся указатели. Запускал прогу на разных компиляторах одна и та же ошибка. Error...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
06.05.2014, 14:27 #2
С++ Не работает программа! Задание было такое: напишите программу invert(p,x,n), возвращающую значение х с инвертированными n-битами, начиная с позиции p ( остальные биты не меняются).
C++
1
2
3
4
5
6
7
8
int invert(int p, int x, int n){
   int mask=0;
  mask=~mask;
  mask<<=p;
  mask>>=sizeof(int)*8-n;
  mask<<=sizeof(int)*8-n-p;
  return ((~x)&mask)|(x&(~mask));
}
1
Kseni1995
0 / 0 / 0
Регистрация: 03.05.2014
Сообщений: 29
06.05.2014, 15:01  [ТС] #3
Все равно не работает из-за bitset!
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,029
06.05.2014, 15:16 #4
В исходном виде код компилируется и даже что-то делает (пруф - http://ideone.com/0VYa7s)
Возможные варианты:
1) Вы компилируете не то, что показываете нам;
2) используете какой-нибудь древний компилятор, у которого могут быть свои тараканы.
1
Kseni1995
0 / 0 / 0
Регистрация: 03.05.2014
Сообщений: 29
06.05.2014, 18:32  [ТС] #5
Спасибо! У меня Microsoft Visual C++ 2010 Express. Не знаю, в чем дело...
0
DrOffset
7141 / 4282 / 964
Регистрация: 30.01.2014
Сообщений: 7,084
06.05.2014, 20:55 #6
Цитата Сообщение от Kseni1995 Посмотреть сообщение
У меня Microsoft Visual C++ 2010 Express.
Ты привел текст ошибки не полностью. Кинь сюда полный текст ошибки.
1
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.05.2014, 21:21 #7
Код, демонстрирующий ошибку ТС:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
void f(int) {}
void f(unsigned long long) {}
 
int main() {
    
    unsigned int ui;
    f( ui ); // error
    f( static_cast<unsigned long long>(ui) ); // ok
    return 0;
}
1
Kseni1995
0 / 0 / 0
Регистрация: 03.05.2014
Сообщений: 29
07.05.2014, 00:05  [ТС] #8
Весь текст ошибки:
1>------ Построение начато: проект: новый, Конфигурация: Debug Win32 ------
1> новый.cpp
1>c:\users\елена\documents\visual studio 2010\projects\новый\новый\новый.cpp(25): error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>"
1> with
1> [
1> _Bits=32
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
1>c:\users\елена\documents\visual studio 2010\projects\новый\новый\новый.cpp(26): error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>"
1> with
1> [
1> _Bits=32
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
Код, демонстрирующий ошибку ТС:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
void f(int) {}
void f(unsigned long long) {}
 
int main() {
    
    unsigned int ui;
    f( ui ); // error
    f( static_cast<unsigned long long>(ui) ); // ok
    return 0;
}
Цитата Сообщение от Tulosba Посмотреть сообщение
Код, демонстрирующий ошибку ТС:
И что из этого следует?
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.05.2014, 08:41 #9
Kseni1995, надо добавить преобразование типа, как в моем коде в 10 строке. Или изменить тип x и invert на unsigned long long.
1
Kseni1995
0 / 0 / 0
Регистрация: 03.05.2014
Сообщений: 29
07.05.2014, 15:07  [ТС] #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Kseni1995, надо добавить преобразование типа, как в моем коде в 10 строке. Или изменить тип x и invert на unsigned long long.
Извините, можете посмотреть мой код еще раз. Я попыталась изменить тип х и invert, но наверно я все равно не так сделала.
Мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "stdafx.h"
#include <iostream> 
#include <bitset> 
using namespace std; 
 
unsigned long long invert(int x, int p, int n)
{
    int count = sizeof(x) * 8;
    for (int i = count - p - n + 1; i <= count - p; ++i) {
        int t = (1 - (x >> i) & 1) << i;
        x &= ~(1 << i);
        x |= t;
    }
    return x;
}
 
int main()
{
    int x;
    int p, n;
    cout << "Введите x в шестнадцатеричной: ";
    cin >> hex >> x;
    cout << "Введите p позицию и число инвертированных битов n ";
    cin >> dec >> p >> n;
    cout << "Исходный x " << bitset<sizeof(x) * 8>(x) << endl
         << "Инвертированный x " << bitset<sizeof(x) * 8>(invert(x, p, n)) << endl;
    return 0;
}
теперь выдает такую ошибку: 1>------ Построение начато: проект: zadacha2_2, Конфигурация: Debug Win32 ------
1> zadacha2_2.cpp
1>LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.05.2014, 15:10 #11
Цитата Сообщение от Kseni1995 Посмотреть сообщение
fatal error LNK1123: сбой при преобразовании в COFF:
Сделайте очистку (Clean) проекта и пересборку (Rebuild).
P.S. код собирабельный под VS2010
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
07.05.2014, 15:10 #12
ребилд не помогает?
Инкрементал линкинг задействован?
Project Properties
-> Configuration Properties
-> Linker (General)
-> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 15:10
Привет! Вот еще темы с ответами:

Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf" - C++
Сделал многофайловую программу программу, вот она: //golf.h #include &lt;iostream&gt; #ifndef golg_h_ #define golf_h_ const int Len =...

Error C2664: Client::First: невозможно преобразовать параметр 1 из "std::queue<_Ty>" в "std::queue<_Ty> &" - C++
barbershop.h: #ifndef __BARBERSHOP_H__ #define __BARBERSHOP_H__ #include &lt;vector&gt; #include &lt;queue&gt; #include &quot;wantshaircut.h&quot; ...

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" - C++
Вроде все правильно а все равно не работает. Подскажите в чем ошибка #include &lt;iostream&gt; template&lt;typename T&gt; inline const T...

Исправить ошибку C2664: fcvt: невозможно преобразовать параметр из "int" в "int *" - C++
ПИшу програму перевод дробового числа с указанием количесв цифр после точки , с инт в чар !!!!Но выбивает ошибку !!! ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.05.2014, 15:10
Ответ Создать тему
Опции темы

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