[C++] probleem met vector gegevens weergeven

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • s.vanrossem
  • Registratie: Maart 2005
  • Laatst online: 19-09 13:50
Ik ben al een tijd bezig om de gegevens uit de vector correct als string te weergeven. Ik heb een screenshot gemaakt en de meeste zullen wel snappen wat ik bedoel alleen ik zelf niet :).

Op de screenshot zie je dat die de waarde uit _ptr als hex print. Dit moet natuurlijk netjes een string worden, maar hoe...

Ik zal niet alle code hier neer zetten, alleen mijn main.cpp klasse. De andere 2 klassen waarmee die communiceerd werken naar behoren :).

main.cpp
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "Util.h"
#include <vector>
#include <iostream>

using namespace std;

int main ()
{
    vector<stlString> vecstrFileList;
    vecstrFileList.clear();

    stlString strDefaultDirectory = _T("D:\\c");

    CUtil::GetFileList(strDefaultDirectory, true, vecstrFileList);

    cout << vecstrFileList[0].c_str() << endl;

    cin.get();
    
    return 0;
}

http://img89.imageshack.us/img89/7321/stom.png

[ Voor 16% gewijzigd door s.vanrossem op 06-04-2009 21:28 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Pssst; code tags ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 07:43
c_str() geeft een pointer naar het eerste teken van de string terug, dus de waarde van die pointer wordt 'netjes' geprint.

Wat is stlString? Overload die niet de operator<< waardoor je hem gewoon direct kunt printen?

[ Voor 5% gewijzigd door Jaap-Jan op 06-04-2009 21:27 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • s.vanrossem
  • Registratie: Maart 2005
  • Laatst online: 19-09 13:50
Jaap-Jan schreef op maandag 06 april 2009 @ 21:23:
c_str() geeft een pointer naar het eerste teken van de string terug, dus die wordt netjes geprint.

Wat is stlString? Overload die niet de operator<< waardoor je hem gewoon direct kunt printen?
De overload snap ik niet helemaal...

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 07:43
s.vanrossem schreef op maandag 06 april 2009 @ 21:26:
[...]


De overload snap ik niet helemaal...
In het kort: je kunt dan

C++:
1
cout << vecstrFileList[0] << endl; 
doen en het komt allemaal goed.

is stlString een alias voor std::string ofzo?

Het gaat hier trouwens om Operator overloading

std::string overload de operator<< op de volgende manier:
C++:
1
ostream& operator<<( ostream& os, const string& s );
Dit werkt door middel van een feature in C++ die 'streams' genoemd worden.

[ Voor 28% gewijzigd door Jaap-Jan op 06-04-2009 21:37 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • s.vanrossem
  • Registratie: Maart 2005
  • Laatst online: 19-09 13:50
Dat is dus het hele probleem, dat wil die niet :). Wanneer ik m zo wil printen wil die niet compilen.

.. en ja, std::string

[ Voor 11% gewijzigd door s.vanrossem op 06-04-2009 21:34 ]


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 07:43
Vergeet je include niet voor <string> ;)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • s.vanrossem
  • Registratie: Maart 2005
  • Laatst online: 19-09 13:50
Gedaan en nog steeds werkt ie niet...

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Wat is de fout die je compiler geeft dan?

Mbt de c_str()-methode: hij print 'm nu als int, terwijl dat als char[] moet. Probeer 'm dan eens te casten?

C++:
1
cout << (*char)(vecstrFileList[0].c_str()) << endl; 

niet gegarandeerd de goede syntax

maar het is natuurlijk beter om uit te zoeken waarom 'ie 'm niet gewoon als string wil weergeven.

[ Voor 26% gewijzigd door ValHallASW op 06-04-2009 21:44 ]


Acties:
  • 0 Henk 'm!

  • s.vanrossem
  • Registratie: Maart 2005
  • Laatst online: 19-09 13:50
ValHallASW schreef op maandag 06 april 2009 @ 21:42:
Wat is de fout die je compiler geeft dan?

Mbt de c_str()-methode: hij print 'm nu als int, terwijl dat als char[] moet. Probeer 'm dan eens te casten?

C++:
1
cout << (*char)(vecstrFileList[0].c_str()) << endl; 

niet gegarandeerd de goede syntax

maar het is natuurlijk beter om uit te zoeken waarom 'ie 'm niet gewoon als string wil weergeven.
Als ik m zo aanpas zoals je zegt geeft die "68" terug in de console...

Het is me een totaal raadsel..

Wanneer ik gewoon cout << vecstrFileList[0] << endl; wil printen krijg ik een error, hier het log:

Build Log      Build started: Project: Project, Configuration: Debug|Win32
 Command Lines      Creating temporary file "d:\documents\desktop\Project\week_2\Debug\RSP00003A30881176.rsp" with contents
[
/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP .\main.cpp
]
Creating command line "cl.exe @d:\documents\desktop\Project\week_2\Debug\RSP00003A30881176.rsp /nologo /errorReport:prompt"
 Output Window      Compiling...
main.cpp
d:\documents\desktop\project\week_2\main.cpp(17) : error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable conversion)
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits,
            _Ax=std::allocator
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\ostream(653): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<>(std::basic_ostream<_Elem,_Traits> &,const char *)'
        with
        [
            _Elem=char,
            _Traits=std::char_traits
        ]
<snip> 6 pagina's foutmeldingen verwijderd :X
Results      Build log was saved at "..."
Project - 1 error(s), 0 warning(s)
 

[ Voor 64% gewijzigd door een moderator op 06-04-2009 23:12 . Reden: Koekoek 8)7 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je stlString is een std::wstring, en dus geeft de c_str() functie een wchar_t* terug die een std::ostream (zoals std::cout) niet snapt. Dat verklaart ook waarom de << niet werkt. Gebruik eens std::wcout.

[ Voor 68% gewijzigd door .oisyn op 06-04-2009 22:04 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • s.vanrossem
  • Registratie: Maart 2005
  • Laatst online: 19-09 13:50
Ik gebruik de volgende code vanaf http://www.codeproject.com/KB/files/GetFileList.aspx.

Ik heb alleen die cpp en header file ingevoegd en wil dus die vector gegevens printen.

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 07:43
s.vanrossem schreef op maandag 06 april 2009 @ 22:05:
Ik gebruik de volgende code vanaf http://www.codeproject.com/KB/files/GetFileList.aspx.

Ik heb alleen die cpp en header file ingevoegd en wil dus die vector gegevens printen.
Al gedaan wat .oisyn zei? ;)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • s.vanrossem
  • Registratie: Maart 2005
  • Laatst online: 19-09 13:50
.oisyn schreef op maandag 06 april 2009 @ 22:02:
Je stlString is een std::wstring, en dus geeft de c_str() functie een wchar_t* terug die een std::ostream (zoals std::cout) niet snapt. Dat verklaart ook waarom de << niet werkt. Gebruik eens std::wcout.
Haha, werkt perfect! Bedankt :)

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
't Is soms overbodig, maar in principe moet je <iostream> en <ostream> includen. std::cout komt uit <iostream>, maar operator<<(std::ostream&) uit <ostream>.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1