WLF
1 / 2 / 0
Регистрация: 06.12.2013
Сообщений: 109
1

Исправить ошибки "cannot convert 'std::__cxx11::string'"

16.09.2018, 20:54. Показов 945. Ответов 3
Метки нет (Все метки)

Всем привет!
Часть кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        case IDC_BUTTON1:
        {
            float a = 0, b = 0, c = 0;
            std::size_t pos = 0;
            std::string buf;
            GetDlgItemText(hDlg, IDC_EDIT1, buf, 255);
            a = std::stof(buf, &pos);
            GetDlgItemText(hDlg, IDC_EDIT2, buf, 255);
            b = std::stof(buf, &pos);
            c = a + b;
            buf = std::to_string(c);
            SetDlgItemText(hDlg, IDC_EDIT3, buf);
            break;
        }
Ошибки:
Код
||=== Build: Release in dialogText (compiler: GNU GCC Compiler) ===|
C:\Users\W0LF\Dropbox\src\CPP\dialogText\main.cpp||In function 'BOOL DlgMain(HWND, UINT, WPARAM, LPARAM)':|
C:\Users\W0LF\Dropbox\src\CPP\dialogText\main.cpp|38|error: cannot convert 'std::__cxx11::string' {aka 'std::__cxx11::basic_string<char>'} to 'LPSTR' {aka 'char*'}|
C:\mingw32\i686-w64-mingw32\include\winuser.h|2358|note:   initializing argument 3 of 'UINT GetDlgItemTextA(HWND, int, LPSTR, int)'|
C:\Users\W0LF\Dropbox\src\CPP\dialogText\main.cpp|40|error: cannot convert 'std::__cxx11::string' {aka 'std::__cxx11::basic_string<char>'} to 'LPSTR' {aka 'char*'}|
C:\mingw32\i686-w64-mingw32\include\winuser.h|2358|note:   initializing argument 3 of 'UINT GetDlgItemTextA(HWND, int, LPSTR, int)'|
C:\Users\W0LF\Dropbox\src\CPP\dialogText\main.cpp|44|error: cannot convert 'std::__cxx11::string' {aka 'std::__cxx11::basic_string<char>'} to 'LPCSTR' {aka 'const char*'}|
C:\mingw32\i686-w64-mingw32\include\winuser.h|2356|note:   initializing argument 3 of 'WINBOOL SetDlgItemTextA(HWND, int, LPCSTR)'|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 2 second(s)) ===|
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2018, 20:54
Ответы с готовыми решениями:

Исправить ошибку "cannot convert 'char*' to 'LPWSTR" в QtCreator.
Здравствуйте, в чём может быть причина? QString getWindowApplication(HWND Wnd) { QString...

Окно "Hello world", ошибки компиляции. Как исправить?
Начал изучать, как правильно писать оконные приложения. Написал с учебника и выдает много много...

Исправить ошибку "error C2065: handle: необъявленый идентификатор"
ShellExecute(handle,&quot;open&quot;,&quot;glava_15.htm&quot;,NULL,path.c_str(),SW_RESTORE); error C2065: handle:...

Исправить ошибку "unresolved external symbol _WinMain@16"
Системное программирование. Ошибки: Error 1 error LNK2019: unresolved external symbol _WinMain@16...

3
75 / 74 / 4
Регистрация: 20.11.2016
Сообщений: 224
16.09.2018, 21:40 2
Очередной новичок в программировании WinAPI???
Несовместимые параметры. В программе buf имеет тип string. А в описании функции он должен иметь другой тип LPTSTR
C
1
2
3
4
5
6
7
UINT GetDlgItemText
(
    HWND hDlg,  // дескриптор диалогового окна
    int nIDDlgItem, // идентификатор элемента управления
    LPTSTR lpString,    // адрес буфера для текста
    int nMaxCount   // максимальная длина строки
);
Попробуй применить преобразование типов, написать (LPTSTR)buf что или (LPTSTR)&buf, точно не знаю)
1
WLF
1 / 2 / 0
Регистрация: 06.12.2013
Сообщений: 109
16.09.2018, 22:00  [ТС] 3
Цитата Сообщение от Radikal_78 Посмотреть сообщение
Очередной новичок в программировании WinAPI???
Да, а что?

Ok, вписал приведение типов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        case IDC_BUTTON1:
        {
            float a = 0, b = 0, c = 0;
            std::size_t pos = 0;
            std::string buf;
            GetDlgItemText(hDlg, IDC_EDIT1, (LPSTR)&buf, 255);
            a = std::stof(buf, &pos);
            GetDlgItemText(hDlg, IDC_EDIT2, (LPSTR)&buf, 255);
            b = std::stof(buf, &pos);
            c = a + b;
            buf = std::to_string(c);
            SetDlgItemText(hDlg, IDC_EDIT3, (LPCSTR)&buf);
            break;
        }
Теперь программа компилируется и, даже, запускается. Но при нажатии на IDC_BUTTON1 просто закрывается без всяких сообщений об ошибках.
Вот полный текст проги:
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
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <string>
#include "resource.h"
 
HINSTANCE hInst;
HWND hDlg;
 
BOOL CALLBACK DlgMain(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_INITDIALOG:
    {
        SetDlgItemText(hDlg, IDC_EDIT1, "0");
        SetDlgItemText(hDlg, IDC_EDIT2, "0");
        SetDlgItemText(hDlg, IDC_EDIT3, "0");
    }
    return TRUE;
 
    case WM_CLOSE:
    {
        DestroyWindow(hDlg);
        ExitProcess(0);
    }
    return TRUE;
 
    case WM_COMMAND:
    {
        switch(LOWORD(wParam))
        {
        case IDC_BUTTON1:
        {
            float a = 0, b = 0, c = 0;
            std::size_t pos = 0;
            std::string buf;
            GetDlgItemText(hDlg, IDC_EDIT1, (LPSTR)&buf, 255);
            a = std::stof(buf, &pos);
            GetDlgItemText(hDlg, IDC_EDIT2, (LPSTR)&buf, 255);
            b = std::stof(buf, &pos);
            c = a + b;
            buf = std::to_string(c);
            SetDlgItemText(hDlg, IDC_EDIT3, (LPCSTR)&buf);
            break;
        }
        case IDC_BUTTON2:
        {
            SendMessage(hDlg, WM_INITDIALOG, 0, 0);
            break;
        }
        }
    }
    return TRUE;
    }
    return FALSE;
}
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    hInst = hInstance;
    MSG msg;
    InitCommonControls();
    hDlg = CreateDialog(hInst, DLG_MAIN, NULL, (DLGPROC)DlgMain);
    if (!hDlg)
    {
        MessageBox(NULL, "Failed creation dialog", "Error", MB_OK);
        ExitProcess(1);
    }
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!IsDialogMessage(hDlg, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return msg.wParam;
}
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 877
16.09.2018, 22:26 4
C++ (Qt)
1
(LPSTR)&buf.c_str();
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2018, 22:26
Помогаю со студенческими работами здесь

"Сбой при преобразовании в COFF: файл недопустим или поврежден", как исправить?
1&gt;LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден ...

WinAPI+HID: WriteFile генерирует код ошибки 1 ("Неверная функция")
Пишу обертку над собственным классом HID. Устройство нахожу, хендл к нему открывается, но при...

"Copy", "Paste", "Delete" в контекстном меню
Доброго времени суток. Есть контекстное меню с кнопками &quot;Создать файл/папку&quot;, &quot;Копировать/...

Стал изучать WinAPI по Петцольду и сразу "неразрешенный внешний символ ." подскажите где ошибки пж
Стал я изучать DirectX по Луне и там были ошибки типа неразрешенный внешний символ и бла бла...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru