Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для Armando111
2 / 1 / 2
Регистрация: 07.02.2014
Сообщений: 246

Как сконвертировать свой тип в тип double?

10.07.2014, 11:42. Показов 2273. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли конвертировать свой тип в тип doble? Если да, то каким способом?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2014, 11:42
Ответы с готовыми решениями:

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include<iostream> #include<cmath> #include<cstdlib> using namespace std; double polp(double af,double...

Не могу преобразовать тип char в тип double
Вся загвоздка в str1 и str2; #include "stdafx.h" #include "conio.h" #include"stdlib.h" #include "cstdlib" #include...

Не могу сконвертировать данные ячейки datagridview в тип double
Извиняюсь, проблему решил сам :)

14
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.07.2014, 11:46
Перегрузить оператор преобразования типов

http://www.learncpp.com/cpp-tu... typecasts/
0
 Аватар для Armando111
2 / 1 / 2
Регистрация: 07.02.2014
Сообщений: 246
10.07.2014, 12:05  [ТС]
А на русском есть?

Добавлено через 14 минут
Вот класс, взял я его в интернете, помогите.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//#include <stdafx.h>
#include <TimeCounter.h>
#include <windows.h>
 
void TimeCounter::Start()
{
//   assert(!started);
   started=true;
   stopped=false;
   new_priority=0;
 
   LARGE_INTEGER pf;
    QueryPerformanceFrequency(&pf);
   i64PerfFrequency = pf.QuadPart;
    Sleep(0);
    QueryPerformanceCounter(&pf);
   tBefore = pf.QuadPart;
}
 
void TimeCounter::Start(int nPriority)
{
//   assert(!started);
   started=true;
   stopped=false;
   new_priority=nPriority;
   old_priority=GetThreadPriority(GetCurrentThread());
   SetThreadPriority(GetCurrentThread(),new_priority);
 
   LARGE_INTEGER pf;
    QueryPerformanceFrequency(&pf);
   i64PerfFrequency = pf.QuadPart;
    Sleep(0); 
   QueryPerformanceCounter(&pf);
   tBefore = pf.QuadPart;
}
 
void TimeCounter::Stop()
{
//   assert(started);
   LARGE_INTEGER tAfter1;
   QueryPerformanceCounter(&tAfter1);
   tAfter = tAfter1.QuadPart;
 
   tWord = tAfter - tBefore;
   tWord /= i64PerfFrequency;
   if (new_priority)
      SetThreadPriority(GetCurrentThread(),old_priority);
   started=false;
   stopped=true;
}
   
double TimeCounter::timeElapsed() const
{
   LARGE_INTEGER tempAfter;
   double tempWord;
 
   if (started)
   {
      QueryPerformanceCounter(&tempAfter);
      tempWord = tempAfter.QuadPart - tBefore;
      tempWord /= i64PerfFrequency;
 
      return tempWord;
   }
   if (stopped)
      return tWord;
   
   return 0.;
}
 
TimeCounter::~TimeCounter()
{
   if (new_priority)
      SetThreadPriority(GetCurrentThread(),old_priority);
}
 
std::ostream& operator<<(std::ostream& out, TimeCounter& cntr)
{
   double fsec = cntr.timeElapsed();
   int hour = int(fsec/3600.);
   double fmin = fsec-3600.*double(hour);
   int min = int(fmin/60.);
   double sec = fmin-60.*double(min);
   //out<<hour<<min<<sec<<std::endl;
   out<<sec<<std::endl;
//   out<<"Calculated with priority number: ";
//   if (cntr.getNewPriority())
//      out<<cntr.getNewPriority()<<endl;
//   else
//      out<<GetThreadPriority(GetCurrentThread())<<endl;
   return out;
}
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// TimeCounter.h
 
#ifndef __TIMECOUNTER222__H__
#define __TIMECOUNTER222__H__
 
#include <iostream>
 
// #include <cassert>
 
//////////////////////////////////////////
/// Допустимые значения приоритета потока:
/// THREAD_PRIORITY_HIGHEST
/// THREAD_PRIORITY_ABOVE_NORMAL
/// THREAD_PRIORITY_NORMAL
/// THREAD_PRIORITY_BELOW_NORMAL
/// THREAD_PRIORITY_LOWEST
//////////////////////////////////////////
 
class TimeCounter
{
friend std::ostream& operator<<(std::ostream& out, TimeCounter& cntr);
public:
 
   TimeCounter() {started=false; stopped=false;}
   void Start();
   void Start(int nPriority);
   void Stop();
   double timeElapsed() const;
   bool getStarted() const {return started;}
   bool getStopped() const {return stopped;} 
   int getNewPriority() const {return new_priority;} 
   ~TimeCounter();
 
protected:
 
   int new_priority;
   int old_priority;
   bool started;
   bool stopped;
   double tBefore, tAfter, i64PerfFrequency;
    double tWord;
 
};
 
#endif
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.07.2014, 12:44
Цитата Сообщение от Armando111 Посмотреть сообщение
Можно ли конвертировать свой тип в тип doble? Если да, то каким способом?
Наитупейший способ:
C++
1
2
3
4
struct C
{
   operator double() { return 100500.42; }
};
Использование:
C++
1
2
C c;
double d = c; // здесь вызывается преобразование
0
 Аватар для Armando111
2 / 1 / 2
Регистрация: 07.02.2014
Сообщений: 246
10.07.2014, 12:57  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
2
3
4
struct C
{
  operator double() { return 100500.42; }
};
и куда это ставить?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.07.2014, 13:36
Цитата Сообщение от Armando111 Посмотреть сообщение
и куда это ставить?
В свой класс.
0
 Аватар для Armando111
2 / 1 / 2
Регистрация: 07.02.2014
Сообщений: 246
10.07.2014, 13:43  [ТС]
Простите, но я не пойму в какой файл, и куда именно...
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.07.2014, 13:47
Armando111, заголовочный файл, реализация. Есть это всё? Если есть - покажите.
0
 Аватар для Armando111
2 / 1 / 2
Регистрация: 07.02.2014
Сообщений: 246
10.07.2014, 13:48  [ТС]
Выше я всё выложил
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.07.2014, 13:55
Цитата Сообщение от Armando111 Посмотреть сообщение
Выше я всё выложил
Для этого случая вообще не нужно преобразование делать, т.к. есть метод timeElapsed() например.
Но если уж очень хочется получить, то например так:
C++
1
2
3
4
5
6
class TimeCounter
{
public:
   operator double() const { return timeElapsed(); } // добавить эту строку
//...
};
1
 Аватар для Armando111
2 / 1 / 2
Регистрация: 07.02.2014
Сообщений: 246
10.07.2014, 14:08  [ТС]
Спасибо, а как можно в String конвертировать?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.07.2014, 14:11
Armando111, в общем случае оператор преобразования в тип T будет выглядеть так:
C++
1
operator T() const { /* do smth */ }
Подставляйте вместо T что хотите: хоть стринги, хоть шорты ...
0
 Аватар для Armando111
2 / 1 / 2
Регистрация: 07.02.2014
Сообщений: 246
10.07.2014, 14:23  [ТС]
Хм, не получается....

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
29
30
31
32
33
34
35
36
37
D:\basic_set_png\New Folder (3)\race\game\TimeCounter.h(26): error C2664: std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &): невозможно преобразовать параметр 1 из "double" в "const std::basic_string<_Elem,_Traits,_Ax> &"
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Ax=std::allocator<char>
1>          ]
1>          Причина: невозможно преобразовать "double" в "const std::basic_string<_Elem,_Traits,_Ax>"
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Ax=std::allocator<char>
1>          ]
1>          Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
1>  TimeCounter.cpp
1>D:\basic_set_png\New Folder (3)\race\game\TimeCounter.h(26): error C2664: std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &): невозможно преобразовать параметр 1 из "double" в "const std::basic_string<_Elem,_Traits,_Ax> &"
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Ax=std::allocator<char>
1>          ]
1>          Причина: невозможно преобразовать "double" в "const std::basic_string<_Elem,_Traits,_Ax>"
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Ax=std::allocator<char>
1>          ]
1>          Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
1>TimeCounter.cpp(14): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
1>TimeCounter.cpp(17): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
1>TimeCounter.cpp(31): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
1>TimeCounter.cpp(34): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
1>TimeCounter.cpp(42): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Добавлено через 1 минуту
C++
1
operator string() { return timeElapsed(); }
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.07.2014, 14:44
Цитата Сообщение от Armando111 Посмотреть сообщение
Хм, не получается....
Читать сообщения об ошибках не получается? Русским же языком написано.
Вы лучше почитайте сначала книжек по языку, вот тут можете список литературы посмотреть.
А потом уже задавайте более конкретные вопросы, когда возникнут проблемы. Т.к. сейчас Вы просто тыкаетесь наугад, не понимая сути дела.

Добавлено через 2 минуты
C++
1
operator std::string() const { return std::to_string(timeElapsed()); }
0
 Аватар для Armando111
2 / 1 / 2
Регистрация: 07.02.2014
Сообщений: 246
10.07.2014, 15:03  [ТС]
Когда я поменял строку на эту, то опять появились ошибки...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
d:\basic_set_png\new folder (3)\race\game\timecounter.h(26): error C2668: std::to_string: неоднозначный вызов перегруженной функции
1>          d:\программы\vs2010c++\vc\include\string(688): может быть "std::string std::to_string(long double)"
1>          d:\программы\vs2010c++\vc\include\string(680): или       "std::string std::to_string(_ULonglong)"
1>          d:\программы\vs2010c++\vc\include\string(672): или       "std::string std::to_string(_Longlong)"
1>          при попытке сопоставить список аргументов "(double)"
1>  TimeCounter.cpp
1>d:\basic_set_png\new folder (3)\race\game\timecounter.h(26): error C2668: std::to_string: неоднозначный вызов перегруженной функции
1>          d:\программы\vs2010c++\vc\include\string(688): может быть "std::string std::to_string(long double)"
1>          d:\программы\vs2010c++\vc\include\string(680): или       "std::string std::to_string(_ULonglong)"
1>          d:\программы\vs2010c++\vc\include\string(672): или       "std::string std::to_string(_Longlong)"
1>          при попытке сопоставить список аргументов "(double)"
1>d:\basic_set_png\new folder (3)\race\game\timecounter.cpp(14): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
1>d:\basic_set_png\new folder (3)\race\game\timecounter.cpp(17): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
1>d:\basic_set_png\new folder (3)\race\game\timecounter.cpp(31): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
1>d:\basic_set_png\new folder (3)\race\game\timecounter.cpp(34): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
1>d:\basic_set_png\new folder (3)\race\game\timecounter.cpp(42): warning C4244: =: преобразование "LONGLONG" в "double", возможна потеря данных
1>  Создание кода...
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.07.2014, 15:03
Помогаю со студенческими работами здесь

Не удается неявно преобразовать тип double в тип bool
static double func1 (double x) { double y = x + 1; return y; } static void...

Не удается неявно преобразовать тип double в тип int
class Program { static void Main(string args) { double k = 0; Random r = new...

Как некие object e, сконвертировать в полученный тип данных
Я получаю тип элеметна посредством GetType() и передаю посредством в метод В методе я получаю System.String Как некие object e,...

Добавить свой тип (Enum) в тип переменной My.Settings
Доброй ночи! В принципе название темы говорит само за себя. Нужен параметр приложения с моим типом данных. В данном случае это enum. Но...

Цикл for и тип double. Переменная округляется, хотя объявлена как Double
using System; class zada4ka_5_32 { static void Main() { int n; double sum = 0.0; double j;...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru