|
| 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
| |
|
|