/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
CString
Fra : Poul


Dato : 21-01-05 08:49

Hej NG

Jeg er igang med at skvive en klasse i VC6 og har problemer med at bruge
CString.

void CDataReader::WriteToDataFile(CString fName) {
std::cout << "Creating File " << fName << std::endl;
...


Jeg kalder metoden følgende:

CDataReader* reader = new CDataReader();
...
CString fn = "C:\test.txt";
reader->WriteToDataFile(fn);

Og får output som "Creating File 00421D7c". Hvad er det galt?


--
/poul



 
 
Mogens Hansen (21-01-2005)
Kommentar
Fra : Mogens Hansen


Dato : 21-01-05 09:12


"Poul" <xefkjbse@yahoo.com> wrote in message
news:41f0ae12$0$29430$ba624c82@nntp06.dk.telia.net...

[8<8<8<]
> void CDataReader::WriteToDataFile(CString fName) {

Det er bedre at skrive
void CDataReader::WriteToDataFile(const CString& fName)
hvorved man undgår en unødvendig kopi af et CString objekt.

[8<8<8<]
> Og får output som "Creating File 00421D7c". Hvad er det galt?

Hvilken værdi har "fName" ?
Umiddelbart ligner det en eller anden adresse.
Jeg har lige prøvet noget tilsvarende kode med Microsoft Visual C++ .NET
2003, og det opfører sig som forventet.

Overvej iøvrigt at benytte C++ Standard Library klassen "std::string" i
stedet for MFC klassen "CString".
Det minimerer dit programs afhængigheder, og øger dermed portabiliteten
(inkl. men ikke begrænset til f.eks. Microsoft .NET) og desuden er "CString"
ikke specielt pænt designet.

Venlig hilsen

Mogens Hansen



Poul (21-01-2005)
Kommentar
Fra : Poul


Dato : 21-01-05 10:38

tak for svaret, jeg har løst min problem ved at benytte mig af cast
LPCTSTR(), som returnerer den pointer til strengen:

std::cout << "Creating File " << LPCTSTR(fName) << std::endl;


> Overvej iøvrigt at benytte C++ Standard Library klassen "std::string" i
> stedet for MFC klassen "CString".
> Det minimerer dit programs afhængigheder, og øger dermed portabiliteten
> (inkl. men ikke begrænset til f.eks. Microsoft .NET) og desuden er
> "CString" ikke specielt pænt designet.


Det har jeg også prøvet, men hvordan udskriver man denne type af streng?

std::cout << "Creating File " << fName << std::endl; // hvor fName er
std::string

resulterer i

"DataReaderClass.cpp(77) : error C2679: binary '<<' : no operator defined
which takes a right-hand operand of type 'const class
std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> >"

Mvh.
Poul



Mogens Hansen (21-01-2005)
Kommentar
Fra : Mogens Hansen


Dato : 21-01-05 11:05


"Poul" <xefkjbse@yahoo.com> wrote in message
news:41f0cd65$0$631$ba624c82@nntp02.dk.telia.net...

[8<8<8<]
> std::cout << "Creating File " << LPCTSTR(fName) << std::endl;

Må jeg anbefale at benytte "static_cast<LPCTSTR>(fName)".
Den har mere begrænsede muligheder for konvertering, er mere tydeligt med
hvad man vil lave og er til at søge efter.

Jeg troede at det var den konvertering der ville blive brugt.

[8<8<8<]
> Det har jeg også prøvet, men hvordan udskriver man denne type af streng?
>
> std::cout << "Creating File " << fName << std::endl; // hvor fName
> er std::string

Det burde virke.

>
> resulterer i
>
> "DataReaderClass.cpp(77) : error C2679: binary '<<' : no operator defined
> which takes a right-hand operand of type 'const class
> std::basic_string<char,struct std::char_traits<char>,class
> std::allocator<char> >"

Hmm...
Hvis det er rigtigt må jeg igen igen konstatere at Microsoft Visual C++ V6.0
er en dårlig compiler med hensyn til implementering af C++ sproget.
De senere Microsoft Visual C++ versioner er langt bedre.

Venlig hilsen

Mogens Hansen



Poul (21-01-2005)
Kommentar
Fra : Poul


Dato : 21-01-05 16:40

>"Poul" <xefkjbse@yahoo.com> wrote in message
>news:41f0cd65$0$631$ba624c82@nntp02.dk.telia.net...
>> "DataReaderClass.cpp(77) : error C2679: binary '<<' : no operator defined
>> which takes a right-hand operand of type 'const class
>> std::basic_string<char,struct std::char_traits<char>,class
>> std::allocator<char> >"


Fandt ud af det, eller rettere sagt fik hjælp i en anden nyhedsfruppe:

Man skal bare inkludere <string> og så er problemet løst!



"Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
news:csqk38$9is$1@news.cybercity.dk...
> Hmm...
> Hvis det er rigtigt må jeg igen igen konstatere at Microsoft Visual C++
> V6.0 er en dårlig compiler med hensyn til implementering af C++ sproget.
> De senere Microsoft Visual C++ versioner er langt bedre.
>
> Venlig hilsen
>
> Mogens Hansen

Agh.. jeg tror at det er meget potentiale i VC, man skal bare lave ordentlig
research i headers, så kan man finde næsten alt. Men jeg håber at Microsoft
vil snart implementere support for MFC og ATL i VC++ 2005 Express, så
skifter jeg til den.

Med Venlig Hilsen
Poul S. Sørensen









Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409074
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste