|
Im reading "teach yourself C++ in 21 days", well Ive been stuck on day 6 for about a week now. Can anyone tell me whats wrong with this source? I keep getting overloaded function errors but I really want to understand this before I move on to day 7. thanks
/*
Chapter 6 end of lesson program
Teach yourself C++ in 21 days
*/
// simple program to test my knowlege of classes...
// make a class that assignes and reads values using public accessors
#include <iostream.h>
class Employee
{
public:
int GetAge() const;
void SetAge(int age);
int GetYearsOfService() const;
void SetYearsOfService(int yearsOfService) const; //Public accessors so that the variables can remain private
int GetSalary() const;
void SetSalary(int salary);
private:
int age;
int yearsOfService; //Private variables
int salary;
};
int Employee::GetAge()
{
return age;
}
void Employee::SetAge(int age2)
{
age = age2;
}
int Employee::GetYearsOfService()
{
return yearsOfService;
}
void Employee::SetYearsOfService(int yearsOfService2)
{
yearsOfService = yearsOfService2
}
int Employee::GetSalary()
{
return salary;
}
void Employee::SetSalary(int salary2)
{
salary = salary2;
}
void main()
{
int age2, yearsOfService2, salary2;
Employee Matt; //define 2 objects of class employee
Employee Max;
Matt.SetAge(21);
Max.SetAge(35);
Matt.SetYearsOfService(2); //assign values to the 2 objects
Max.SetYearsOfService(6);
Matt.SetSalary(20000);
Max.SetSalary(34600);
cout<<"Matts age is : ";
cout<<Matt.GetAge() <<"\n";
cout<<"Maxs age is : ";
cout<<Max.GetAge() <<"\n";
cout<<"Matts salary is : ";
cout<<Matt.GetSalary() <<"\n"; //output the above values
cout<<"Maxs salary is : ";
cout<<Max.GetSalary() <<"\n";
cout<<"Matts years of service is : ";
cout<<Matt.GetYearsOfService() <<"\n";
cout<<"Maxs years of service is : ";
cout<<Max.GetYearsOfService() <<"\n";
}
thanks for any help or advice
|
|
|
|
|
1) Overloaded function errors due to missing const qualifier in function definitions
When you declare a member function constant, the const qualifier is also required in the function definition (and declaration). For example,
class Employee
{
...
int GetAge() const;
...
};
int Employee::GetAge() const{
return age;
}
2) Don't declare SetYearsOfService() as a constant member function (leave off the const at the end)
3) Missing ; in SetYearsOfService()
void Employee::SetYearsOfService(int YearsOfService2)
{
yearsOfService=yearsOfService2;
}
|
|
|
|
|
thanks, I feel the headache going away already
|
|
|
|
|
like a file browser, my tree control has two kind of item : folder and file. But ctreectrl just supply one method to sort all items.
please show me the way that just sort the folder or just sort the file item...
thanks...
|
|
|
|
|
You need to determine while sorting that the item is file of a folder for that you use lparam of the TVITEM to store that information.
Then its a matter of logic.
here is the logic.
if(item1 is file && item2 is file)
do the sorting.
if(item1 is folder && item2 is folder2)
do the sorting.
if((item1 is folder && item2 is file) || (item1 is file && item2 is folder))
return the value that will determine wheather the files should be at the top.
Toughest Steel Comes From Hottest Furnance
|
|
|
|
|
Im trying to get the item details of a CListCtrl m_lst1.
Using the foloowing code...
only that im not getting any result
any suggestions
-------------------------//--
char szLabel[256];
NMLVDISPINFO NMLVDispInfo;
ZeroMemory(&NMLVDispInfo.item, sizeof(LVITEM));
NMLVDispInfo.hdr.code = LVN_GETDISPINFO;
NMLVDispInfo.hdr.hwndFrom = AfxGetMainWnd()->m_hWnd;
NMLVDispInfo.hdr.idFrom = AfxGetMainWnd()->GetDlgCtrlID();
NMLVDispInfo.item.iItem = 1;
NMLVDispInfo.item.mask = LVIF_DI_SETITEM| LVIF_TEXT;
NMLVDispInfo.item.pszText = szLabel;
NMLVDispInfo.item.cchTextMax = 255;
m_lst1.SendMessage(WM_NOTIFY, (WPARAM)NMLVDispInfo.hdr.hwndFrom, (LPARAM)(LPNMHDR) &NMLVDispInfo);
-------------------------//--
|
|
|
|
|
fordge wrote:
NMLVDISPINFO NMLVDispInfo;
ZeroMemory(&NMLVDispInfo.item, sizeof(LVITEM));
Not that I'm providing any help with your problem at hand, but since you are using C++ you should be aware you can do:
NMLVDISPINFO NMLVDispInfo = { 0 };
To zero-initialize the struct.
That your code fills the struct with zeros based on the size of a completely unrelated struct (the boldface parts) also displays this technique could help create less buggy programs.
|
|
|
|
|
If i create window dialog base to do interfacing. In side the dialog base i got 2 button to control the on and off function.And 4 radio button to control the dc motor speed consist of three radio button control speed in low,medium and high and another one radio button to control the stop of operate dc motor. Actually i have two set consist of 4 radio button just now i mention as above.... Total got 2 button and 8 radio button!!!
Anyone can explain for how many data port,control port or status i need on the parallel port?
|
|
|
|
|
First of all, to get you started, here is the pin designation[^] of an SPP (Standard Pareller Port) mode LPT.
As you can see from the schematic, by utilizing the DATA port, you are granted access to 8 bits of control information summing up to a total of 256 control possibilities.
Now, your task is to design the logic on how the motor is driven. The LPT can supply +5 V from each pin, and the maximum current is limited by the power source of the computer. As such, it is recommended to use the pin outputs only for TTL-level logic control. Consider the following example, with pins D0 - D7 being the data pins, and D0 being the least significant bit.
D7 D0 DEC
0 0 0 0 0 0 0 1 = 1 = Stop motor
0 0 0 0 0 0 1 1 = 3 = Low drive
0 0 0 0 0 1 1 1 = 5 = Medium drive
0 0 0 0 1 1 1 1 = 7 = High drive If this was your logic diagram, then you would require a 3-bit D/A converter to convert the digital word into analogue voltage. The idea is that you first have an on/off switch controlled purely by D0. Then, D1 - D3 are bridged into controlling an OP-AMP to do the conversion. You can find an example of a simple 3-bit DA-converter from this page[^].
As for the actual port control, in the IBM standard, the pareller port can be found from the IO space at address 0x378. Here[^] is a small example on how to write and read data from a pareller port under Microsoft Visual Studio. Note, however, that this method might not work under Windows 2000/NT/XP because their driver architecture is a bit different. See this article[^] under the CodeProject->System->Hardware programming.
Happy interfacing
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
If i use the logic circuit just u mention above but how the D/A converter can control the speed of dc motor? D/A converter can stand alone to control motor speed or need aid from the software!!!!
Thank You
|
|
|
|
|
The D/A converter cannot run the DC motor alone; it needs input signals to determine the output. These input signals (TTL-level) are provided by the pareller port's pins.
I won't start explaining in detail how the converter works here, that's a job for an electronics teacher. Instead, in a glance, let's say that the converter is able to convert a digital word into an analogue signal: the amplitude of the signal is determined by the digital input.
So, in the logic example, we had three digital pins, D1-D3. If you have a maximum input of +12 V DC for the converter, then an input of 111 would cause it to output +12V. The other levels of voltage can be directly calculated.
This means that depending on the output of the digital pins, the DC motor is fed with more voltage, thus resulting in greater RPM of the rotor. However, as I do not know how the motor is constructed, this might not be the correct approach. Some motors have seperate input pins for seperate drive levels, for example, feeding it 5V + 5V + 5V would result in full speed, where as 0V + 5V + 5V would stand for medium level drive. You must consult the motor's documentation and schematics for these details.
The basic idea is that whatever the way in which the motor is controlled, you MUST have some-sort of a voltage-level seperation between the pareller port and the motor. This means that you cannot feed the inputs of the motor from the pins directly. Doing so would break the port most certainly, and might even damage your computer seriously.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
To control the motor at high speed parallel port need to send the 0000 0111 to the converter. So i facing the another problem bcos parallel port is limited output port. When i want to control two set of the fan i not has enough output from the parallel port.... Actually i found the converter circuitry but this converter need 8 data port operate!!!
Thank You
|
|
|
|
|
deven chin wrote:
To control the motor at high speed parallel port need to send the 0000 0111 to the converter
Correct.
deven chin wrote:
When i want to control two set of the fan i not has enough output from the parallel port
Incorrect. You must have an ACTIVE D/A CONVERTER between the port and the motor. This means, in english, that all output power (voltage or current) from the converter comes from a different power source, such as a 12 V battery. You do not feed the motor directly with the power outputted from the pareller port, as this power amount is NOT ENOUGH, and taking out too much power (voltage or current) from the port will break it, and possibly even damage your motherboard.
Having an 8-bit output allows you to have a total of 256 different voltage levels, including no voltage. If you split it to half, 4-bit & 4-bit, you can still get up to 16 voltage levels. Heck, you could even split these two in half, having four 2-bit digital outputs, with each having a possible number of 4 voltage levels. Voltages like +0V, +4V, +8V and +12V, for example, depending on the bit sequence of the two bits. This would allow you, with 4 D/A converters, control up to four DC motors independently. I think that is more than enough.
So, once more: get yourself the schematics of a R2-2 D/A converter that utilizes an operational amplifier. If you have no other way, contact the local electronics shop and ask them for information. Tell them that you need an OP-AMP based D/A converter, they should understand. I won't start designing the schematic or the output control for you, because I don't do that kind of stuff free-of-charge.
If there is still something more you do not figure out, then place the question. But please, next time you write, do a complete grammar and typo-check on your post, and do not use abbreviations, no matter how busy you were. It is much easier to answer your posts when they are readable and easy to understand. Currently, your posts are pretty far from that.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
I have tried to capture WM_POWERBROADCAST and all manner of system messages and API calls.
It seems these messages and API are all 'battery' related and power suspend-state related.
The UPS system service works fine and the 'messenger' service pops up a window when the UPS is running on battery power, and an event is logged to the Windows event log. However, a running application is just terminated seemingly without warning.
So, has anyone worked with the UPS service or some other drivers to be able to detect from their programs that an application is running on Windows that has just been toggled from the AC Power to the UPS Battery power?
Are there some links to this?
The best I came up with so far was some brief Linux code that directly monitored a few signals on the serial port, and I can do that if I have to, but I would rather let the rest of the system interact with the UPS as well.
|
|
|
|
|
Check out the WMI class, Win32_UninterruptiblePowerSupply .
A rich person is not the one who has the most, but the one that needs the least.
|
|
|
|
|
If anyone uses a primitive windows frame... if you make the caption equal something like \nHello it will actually make a new line in the caption bar, I thought this was wierd cause it is acting like a static control...
If anyone wants to see this I could email a program that demonstrates the wierd effect.
Actual Linux Penguins were harmed in the creation of this message.
|
|
|
|
|
Snyp wrote:
Actual Linux Penguins were harmed in the creation of this message.
poor penguins
The word of the day is legs, let's go back to my house and spread the word
|
|
|
|
|
But.. Isn't this the way it is supposed to work ? Naturally the caption area of the window is determined by the caption size, whether it had multiple lines, or a bigger font size/style. Wouldn't it look stupid if you used a huge font to draw the caption text then a minimalistic rectangle to represent the caption so that the font would clip out from it's region ?
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Well yes but the wierd thing is that the text gets cut off like half of it at least...
Actual Linux Penguins were harmed in the creation of this message.
|
|
|
|
|
CMyDialog is a modal dialog invoked in CMyView, in CMyDialog, user can temporarily hide the dialog and go to CMyView window and use mouse to pick a point, then return to the dialog.
But how to implement the function gPickPoint() below,
CPoint gPickPoint()
{
CPoint pt;
// wait? loop? until user pick a point
return pt;
}
CMyView::OnBtnMyDialog()
{
CMyDialog dlg(this);
dlg.DoModal();
}
CMyDialog::OnBtnPickPoint()
{
CPoint pt;
CWnd *pFrameWnd = GetParent();
// hide dialog and go to view window
pFrameWnd->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
pFrameWnd->SetFocus();
// waiting for user to pick a point from view
pt = gPickPoint();
// return from view window to dialog
ShowWindow(SW_SHOW);
SetFocus();
pFrameWnd->EnableWindow(FALSE);
EnableWindow(TRUE);
}
|
|
|
|
|
For the point-click handling, here's the design routine:
1. Use GetClienRect or GetWindowRect to get the view window's dimensions into a RECT structure. If using GetClientRect , remember to convert into screen coordinates.
2. Use ClipCursor to restrict the cursor into moving inside the defined RECT only. The cursor cannot leave this area now. Also, set a flag e.g. m_bCursorIsClipped to TRUE.
3. In the WM_LBUTTONDOWN handler of the view, check the flag value, and if it says that the cursor is clipped, then first send the point information to the dialog, then remove the clipping rectangle and show the dialog window again, hiding the main view. Lastly, set the flag to FALSE.
The clipping rectangle ensures that the user cannot do anything else on the frame window. He can use ALT+TAB to switch to other programs: in this case, you must handle this request (WM_KILLFOCUS ) and remove the clipping rectangle if it exists. You can re-set the clip in WM_SETFOCUS handler, if needed.
You should code a new user message for the view, called WM_USER_PICKPOINT , for example. Then in the dialog's button click handler, issue this message to the view window after hiding the dialog and showing the main frame. The handler for this message in the view window sets the cursor clipping region and the flag. The clipping region is removed and the flag nullified in the WM_LBUTTONDOWN handler of the view window, like I explained above.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Yes, it works.
Instead of restrict mouse within view's client area, I put patches for many toolbar or menu commands, and WM_CLOSE for main frame, to prevent user from running other command before this cmd finished.
But another little problem appears, CWinApp::OnIdle() ceased, which means ON_UPDATE_COMMAND_UI disabled. not sure why.
|
|
|
|
|
Hello,
How can I get the file size of a file using standard C++ library (not MFC)?
Thanks!!
Nachi
|
|
|
|
|
Do you mean, a function like _filelength ?
|
|
|
|
|
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream file;
int size = 0;
file.open("test.txt",ios::in); //Replace test.txt with file name
if(file.is_open())
{
file.seekp(0,ios::end); //Move position of stream to the end
size = file.tellp(); //Get position at end which tells size
file.close();
}
cout << "File size: " << size << endl;
return 0;
}
|
|
|
|
|