Mam napisany program do zamiany z systemu dziesietnego na szesnastkowy w Dev C++ ale chce go takze zrobic w Visual C++ 2005 na podstawie okien dialogowych w Dialog Base.
To jest mój kod z klasy cpp i h :
CDigitConwertDlg.h :
#include
#include
#include
#pragma once
// CDigitConwertDlg dialog
class CDigitConwertDlg : public CDialog
{
// Construction
public:
CDigitConwertDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
enum { IDD = IDD_DIGITCONWERT_DIALOG };
public:
int liczba;
int wynik;
int tablica[32];
int tablica_dl;
int zm_pom;
string hexNumber;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedPrzyciskKonwertuj();
};
CDigitConwertDlg.cpp:
#include "stdafx.h"
#include "DigitConwert.h"
#include "DigitConwertDlg.h"
#include "cmath"
#include "string"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
........................................................
Tutaj duzo kodu ktory sam sie generuje
.........................................................
void CDigitConwertDlg::OnBnClickedPrzyciskKonwertuj()
{
UpdateData(TRUE);
do
{
zm_pom = liczba % 16;
if(zm_pom >= 0 && zm_pom <= 9)
hexNumber.insert(0, 1, char('0' + zm_pom)); // string& insert( size_type index, size_type num, char ch );
else
hexNumber.insert(0, 1, char('7' + zm_pom));
liczba /= 16;
}
while(liczba > 0);
wynik=hexNumber;
UpdateData(FALSE);
}
Po skompilowaniu wywala mi 9 bledow:
error C2065: 'hexNumber' : undeclared identifier //digitconwertdlg.cpp
error C2146: syntax error : missing ';' before identifier 'hexNumber' // digitconwertdlg.h linijka:25
error C2228: left of '.insert' must have class/struct/union // digitconwertdlg.cpp
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int //digitconwertdlg.h linijka:25
Stworzyłeś zmienną, ale podałeś niepoprawny typ. W 25 linijce pliku digitconwertdlg.h powinno być std::string hexNumber, a nie string hexNumber. Ew. możesz zadeklarować “domyślną” przestrzeń nazw.
No tak musze przypisac ten string hexNumber do zmiennej int wynik bo do tej zmiennej mam przypisanego mojego EditBoxa gdzie ma byc wyswietlany wynik w postaci szesnastkowej z tego stringu.
Nie wiem moze troche niezrozumiale to tlumacze jak tak to sorry. A dalo by sie to wtedy jakos zrobic z tym atoi?
atoi konwertuje string do zwykłej liczby, a to jak ją sobie wyświetlisz, to zależy od Ciebie.
Nadal nie rozumiem o co Ci chodzi… Chcesz wyświetlić wynik jako liczbę szesnastkową, a tą masz zapisaną w stringu hexNumber, to co za problem podać go jako zwykły tekst(char *)? hexNumber.c_string() i masz jako const char *
No wlasnie ta liczbe mam wyswietlic w EditBoxie ktory jest zminna typu np.CString lub int czyli musze jakos przekonwertowc ten
string hexNumber gdyz stringu nie mozna wyswietlac w editboxie. W Visualu C++ 2005 jest taka funkcja jak c_str ale chyba nie wiem jak jej uzyc. A nie mozna tego stringu przekonwertowac jakos do CString?
Za duzego opisu to nie ma o tej funkcji? A ja nawet nie wiem czy mozna uzyc tej funkcji i w jaki sposob aby to przekonwertowac tak jak wyzej pisalem. Moglby ktos pokazac to na moim przykladzie?
Po pierwsze napisz co to jest ta klasa CString! Tak to my dużo tu nie zrobimy. Jeśli ma konstruktor przyjmujący jako parametr “const char *” albo “char *” to można spokojnie wpisać coś takiego:
Na żaden, oprócz Byte *. Bo w Windows SDK Byte jest synonimem do char.
Konstruktor CString’u przyjmuje jako parametr LPCWSTR(wchar_t *), musisz skonwertować* na ten właśnie typ, albo zamiast std::string używać std::wstring.