Z Dev C++ do Visuala błędy!

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

Nie wiem co jest nie tak z tym programem:(

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.

Ok działa dzięki! :slight_smile:

Ale problem jest teraz jak wyświetlić w EditBoxie to std::string hexNumber.

Wyswietlic musze to w zmiennej wynk ktora jest przypisana do tego EditBoxa:

CDigitConwertDlg::CDigitConwertDlg(CWnd* pParent /*=NULL*/)

	: CDialog(CDigitConwertDlg::IDD, pParent)

{

	liczba=0;

	wynik=0;

	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}


void CDigitConwertDlg::DoDataExchange(CDataExchange* pDX)

{

	DDX_Text(pDX, IDC_LICZBA, liczba);

	DDX_Text(pDX, IDC_WYNIK, wynik); 

	CDialog::DoDataExchange(pDX);

}

public:

	int liczba;

	int wynik;

    int tablica[32];

    int tablica_dl;

	int zm_pom;

	std::string hexNumber;

Musze chyba jakos przypisac ten lancuch hexString pod zmienna wynik. Probowalem na rozne sposoby ale mi caly czas bledy wyskakuja.

Chcesz skonwertować liczbę szesnastkową z tekstu do zwykłego int’a?

Jak tak, to: atoi, a jak nie, to wytłumacz o co chodzi.

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 * :wink:

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?

Polecam dokumentację C++: http://www.cppreference.com

Tu jest o tej funkcji, która jest zawarta w klasie string.

http://www.cppreference.com/cppstring/c_str.html

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:

CString(hexNumber.c_string())

Wlasnie to:

CString(hexNumber.c_string())

nie dziala :frowning:

Moze inaczej: :idea:

Poprostu da sie jakos ta zmienna std::string hexNumber przypisac do zmiennej jednego z tych typow:

-CString

-Byte

-DECIMAL

-double

-DWORD

-float

-int

-long

-short

-UINT

-ULONGONG

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.

To co ty napisales nic nie da. Juz wiem jak to powinno byc :idea: Trzeba uzyc funkcji c_str() dostepnej w Visualu. A kod ma wygladac tak:

CString hexNumber_CS(hexNumber.c_str());

To może zamiast konwertować, od razu wpisywać do CString’a?

To co napisałem powinno działać, bo robiłem dokładnie to samo co w twoim kodzie, tylko w innym zakresie.