|
fopen function need one const char * as its first parameter.
in visual C++ 6 we can cast a CString variable to a char* by using (LPCTSTR) .
but this simple methodology does not work for visual C++ 2005.
Because we want to upgrade one project from VC6 to VC2005, thus it is neccessary to change it.
Now I want a simple code snippet which converts a CString variable to char* .
Regards
Gut Mikh.
|
|
|
|
|
You shouldn't need the cast. CString has a cast operator that does this for you.
I'm still wondering what the actual compiler error is.
Gut Mikh Tappe wrote: we can cast a CString variable to a char* by using (LPCTSTR)
That's not a valid cast. LPCTSTR is a constant pointer to a TCHAR.
TCHAR can be a char or a wchar_t, depending on if _UNICODE is defined.
Without knowing the error message, I'm guessing your build settings are for unicode,
in which case you should either change the project settings to not use unicode, use the
correct CStringT type, or use _tfopen() instead of fopen().
Regardless, you should NOT need the cast. Casts should be used only when absolutely necessary,
because they can hide errors, exactly as demonstrated here.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I do agree with Mark's comment. When you create a new project in Visual C++ 2005, probably you might have not noticed the "Use Unicode Libraries" in the Wizard.
While you are dealing with these it's better to use tchar functions. You can get those functions just by including #include <tchar.h>
Please post the error code if possible.
-Sarath.
"Great hopes make everything great possible" - Benjamin Franklin
|
|
|
|
|
i do agree with Sarath.
when you change the charset in the project property sheet from "Use Unicode Libraries" to "Use MBCS Libraries",the compile problem with CString will disappear at once.
|
|
|
|
|
Try:
LPCSTR
Instead of LPCTSTR
|
|
|
|
|
Drop the casts. Use code like this:
#include <tchar.h>
file = _tfopen(CSTRING_VARIABLE, _T("wb+"));
Steve
|
|
|
|
|
Any experienced people, would you please check my code fragments which is to collect all files of *.txt in the current directory where the present program resides. The following code is not working. It compiles, but did not pickup any files of *.txt in the directory.
I do not know why and where is the problem ? I try to store all the collected files into fileName[i].
Thanks alots for the guidance.
-------------------------------------------------
//
hFind = FindFirstFile("*.txt", &FindFileData);
fileName[0]=FindFileData.cFileName;
//
while (FindNextFile(hFind, &FindFileData) != 0)
{
i=+1;
fileName[i]=FindFileData.cFileName;
}
int nfile=i;
FindClose(hFind);
|
|
|
|
|
mrby123 wrote: i=+1;
Is that what you meant there? Or did you want
i += 1;
You probably want to increment i one more time after the while() loop to get
the proper file count.
You should also check and make sure FindFirstFile succeeds.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks You suggestion solve the problem. Thanks again.
|
|
|
|
|
can't you copy the file name with strcpy() or strncpy() instead of your own loop?
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips:
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use PRE tags to preserve formatting when showing multi-line code snippets
|
|
|
|
|
mrby123 wrote: fileName[...]=FindFileData.cFileName;
Ouch. I didn't even look at that.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Maybe you want to change your code to this,do you want?
hFind = FindFirstFile(_T("*.txt"), &FindFileData);
int i=0;
do
{
fileName[i]=FindFileData.cFileName;
i++;
}while(FindNextFile(hFind, &FindFileData) != 0);
int nfile=i;
FindClose(hFind);
or like this
CStringArray str;
hFind = FindFirstFile(_T("*.txt"), &FindFileData);
do
{
str.Add(FindFileData.cFileName);
}while(FindNextFile(hFind, &FindFileData) != 0);
int nfile=str.GetCount();
FindClose(hFind);
|
|
|
|
|
Hello to all,
I never understand linker errors in visual studio,
I bring my class declaration, and the errors.
please advice me what to do.
header:
class Employee
{
public:
Employee(char* name, int hourFee, int hoursPerMonth, int overTime);
Employee(char* name, int hourFee, int hoursPerMonth);
Employee(char* name, int hourFee);
static int _minimumFee;
static int _maximumHours;
int getSalary();
void print();
int getHourFee();
void setHourFee(int hourFee);
int gethoursPerMonth();
void setHoursPerMonth(int hours);
private:
char* _name;
int _hourFee;
int _hoursPerMonth;
int _overTime;
};
implementation:
#include"Employee.h"
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
Employee::Employee(char* name, int hourFee, int hoursPerMonth, int overTime)
{
_name = strdup(name);
_hourFee = hourFee;
_hoursPerMonth = hoursPerMonth;
_overTime = overTime;
Employee::_minimumFee = 3600;
Employee::_maximumHours= 190;
}
Employee::Employee(char* name, int hourFee, int hoursPerMonth)
{
Employee::Employee(name, hourFee, hoursPerMonth, 0);
}
Employee::Employee(char* name, int hourFee)
{
Employee::Employee(name, hourFee, 160, 0);
}
int Employee::getSalary()
{
return (_hourFee * _hoursPerMonth) + (_overTime * (_hourFee * 2));
}
void Employee::print()
{
cout << "Employee, " << _name << " Salary = " << getSalary() << " hour Fee = " << _hourFee
<< " hours of work per month " << _hoursPerMonth << " over hours made = " << _overTime << endl;
}
void Employee::setHourFee(int hourFee)
{
if (hourFee < Employee::_minimumFee)
{
cout << "can't underpay a worker!!!" << endl;
return;
}
else
{
_hourFee = hourFee;
}
}
int Employee::getHourFee()
{
return _hourFee;
}
int Employee::gethoursPerMonth()
{
return _hoursPerMonth;
}
void Employee::setHoursPerMonth(int hours)
{
if(hours > Employee::_maximumHours)
{
_hoursPerMonth = 190;
_overTime = (hours - _hoursPerMonth);
}
else
{
_hoursPerMonth = hours;
}
}
ERRORS:
error LNK2019: unresolved external symbol "public: static int Employee::_maximumHours" (?_maximumHours@Employee@@2HA) referenced in function "public: __thiscall Employee::Employee(char *,int,int,int)" (??0Employee@@QAE@PADHHH@Z) Employee.obj
Error 3 error LNK2019: unresolved external symbol "public: static int Employee::_minimumFee" (?_minimumFee@Employee@@2HA) referenced in function "public: __thiscall Employee::Employee(char *,int,int,int)" (??0Employee@@QAE@PADHHH@Z) Employee.obj <br />
please help me.
|
|
|
|
|
You need to create a actual instance of your static member variables.
Add something like this to the CPP file (outside of any methods/functions)...
int Employee::_minimumFee = ...;
int Employee::_maximumHours = ...; Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
how come I can't define the static variable in the .h with all other members,
and initiate it in the constructor?
isn't it a basic thing we might wanna do?
how exactly does it work?
thanks a lot for the reply.
till you answer I will do what you said
|
|
|
|
|
With static member variables, only one instance exists that is shared between all objects of
the class. It is your responsibility to provide that one instance somewhere.
Because the static member variables are shared between all objects of the class, it doesn't make much
sense for every new object of the class to re-initialize the variables.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
and y do I redefine it by again specifying it's an int,
after doing it in the header?
|
|
|
|
|
You're not redefining it.
It's declared in the class declaration (.h file), defined in the cpp file (or wherever you choose to define it).
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
ohhhhhhh thanks man, you brought me back.
you helped me alot Mark.
I feel you disliked the question I asked, maybe because it's a newbe question,
so I am sorry man, but it got me all mixed up and again I thank you for your help
|
|
|
|
|
gizmokaka wrote: I feel you disliked the question I asked, maybe because it's a newbe question
Not at all! We're all newbies at some point - I'm often a newbie!
Cheers,
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
MICROSOFT MVP I some how doubt you are a newbe
|
|
|
|
|
I have lots of experience with C++, but there's so many different technologies
that most of the time I feel I know barely anything.
For example, I'd be a total newbie if I tried to build a website
Cheers,
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
thanks for the encouragement.
have a great day.
|
|
|
|
|
Hi.
I'm reading C++ Primer Plus Fifth Edition by Stephen Prata. Chapter 7, page 326 : Ruler.cpp
example tries to explain how to write a interesting program. You see the code below and guess what? I see it too but it's just to complicated and the books explanation is not making that clearer. If i can't get it there is no point to continue to study c++. so i hope you can give me a hint
<b>CODE: </b>
#include <iostream>
using namespace std;
const int Len = 66;
const int Divs = 6;
void subdivide(char ar[], int low, int high, int level);
int main()
{
char ruler[Len];
int i;
for (i = 1; i < Len - 2; i++)
ruler[i] = ' ';
ruler[Len - 1] = '\0';
int max = Len - 2;
int min = 0;
ruler[min] = ruler[max] = '|';
std::cout << ruler << std::endl;
for (i = 1; i <= Divs; i++)
{
subdivide(ruler,min,max, i);
std::cout << ruler << std::endl;
for (int j = 1; j < Len - 2; j++)
ruler[j] = ' '; // reset to blank ruler
}
cin.get();
cin.get();
return 0;
}
void subdivide(char ar[], int low, int high, int level)
{
if (level == 0)
return;
int mid = (high + low) / 2;
ar[mid] = '|';
subdivide(ar, low, mid, level - 1);
subdivide(ar, mid, high, level - 1);
}
int life()
{
in a land with no bird, no spring. My first journey was a
return 0;
}
|
|
|
|
|
pourang wrote: so i hope you can give me a hint
Which statement is giving you trouble?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|