|
Sure
In a header file
struct data {
int idx_;
int noOfRegs_;
} *data_;
.. and then later (in a function) ...
int records_in_file = 152;
CString fname = "..//Data//sta-f-83.crs";
data_ = new data[records_in_file];
// and this is what I posted earlier
ifstream f_;
f_.open(fname);
while(i < records_in_file) {
f_ >> data_[i].idx_ >> ws;
f_ >> data_[i].noOfRegs_ >> ws;
i++;
}
Thx
Graham
|
|
|
|
|
As a wild guess I'd say it's interpreting the numbers as octal due to the leading 0. 8 is not a legal octal digit so the stream stops reading after "000" which is why you get 0.
|
|
|
|
|
Thanks
So what do I do?
Graham
|
|
|
|
|
I don't know the stream classes well enough, I would guess that there is a function or manipulator that will make it parse numbers as base 10.
|
|
|
|
|
Use f_.setf(ios::dec) just befor reading values. For istance:
f_.setf(ios::dec);
while(i < records_in_file) {
f_ >> data_[i].idx_ >> ws;
f_ >> data_[i].noOfRegs_ >> ws;
i++;
}
I have to admit, Michael Dunn was very clever.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Just quickly tried it - need to fully test - but looks good.
Thanks both. I owe you one.
Cheers
Graham
|
|
|
|
|
I'm working on my psychic debugging powers.
|
|
|
|
|
Michael Dunn wrote: I'm working on my psychic debugging powers
Hey Mike, I have a bug. How can I fix it?
You may be right I may be crazy -- Billy Joel --
Within you lies the power for good, use it!!!
|
|
|
|
|
|
|
|
Hi all,
my question is if I define a class myClass with destructor, assign operator (=) and copy constructor, etc etc.
If I later use my class like this:
myClass &a=*new myClass(whatever);
myClass &b=a;
Do I have to explicitly delete b? I've read you should only delete a class if you have instantiated it with a new. I know that behind the curtains b is created with a new call inside the dll, but do I have to delete it explicitly from my app?
thanks
|
|
|
|
|
gumi_r@msn.com wrote: myClass &a=*new myClass(whatever);
myClass &b=a;
since you've dynamically allocated memory for an istance of myClass , then you have to delete it somewhere. You can call either delete &b or delete &a (of course don't call both).
Cheers
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Ok thanks. That makes sense as I'm already deleting any pointers I need to inside my copy constructor.
Next step would be the assignment operator. Say for example y have:
myClass &a=*new myClass(whatever);
myClass &b=*new myClass(whatever);
myClass &c=a+b;
do I have to delete &c?
thanks for any replies.
|
|
|
|
|
gumi_r@msn.com wrote: myClass &c=a+b;
IMHO you should not do this, because you're trying to assign a reference to a temporary object. For instance, the following is noy allowed(the compiler complains about):
int &i= *new int(5);
int &j=i;
int &k=i+j;
BTW: Doing some experimentation?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
It is not illegal if you use a const reference.
Steve
|
|
|
|
|
Yeah, I didn't know it. Thank you (though seems rather clumsy...).
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
I would like to give a command from inside my program to do a File New command.
I tried pApp->CWinApp::OnFileNew() but it tells me I can't access a protected member.
Fair enough, but is there some system command I can give instead?
Thanks,
Ilan
|
|
|
|
|
Try this:
::PostMessage(AfxGetMainWnd()->GetSafeHwnd(), ID_FILE_OPEN, 0, 0);
or even
AfxGetMainWnd()-> PostMessage(ID_FILE_OPEN, 0, 0);
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Up front it looks like a good idea, but I put in break points and it doesn't reach them. So, I'm still stuck on the proper way to do it.
|
|
|
|
|
You're going to have to give more detail if you want help. WHERE did you put the breakpoints?
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Sorry, I didn't realize you continued to look at my posts.
I have break points at both OnNewDocument and OnOpenDocument
<br />
<br />
BOOL CCardiacDoc::OnNewDocument()<br />
{<br />
char buff[100];<br />
if( m_dataDirectory.GetLength() == 0 && _getcwd(buff, 98)) {<br />
m_dataDirectory = buff;<br />
m_dataDirectory += "\\*";<br />
}<br />
if (!CDocument::OnNewDocument())<br />
return FALSE;<br />
<br />
<br />
return TRUE;<br />
}<br />
<br />
BOOL CCardiacDoc::OnOpenDocument(LPCTSTR lpszPathName)<br />
{<br />
m_dataDirectory = lpszPathName;<br />
int j = m_dataDirectory.ReverseFind('\\');<br />
if( j > 0) {<br />
m_dataDirectory = m_dataDirectory.Left(j+1) + "*";<br />
}<br />
if (!CDocument::OnOpenDocument(lpszPathName))<br />
return FALSE;<br />
<br />
<br />
return TRUE;<br />
}<br />
I see that when I start the program it goes to OnNewDocument. Likewise, before I override the OnOpen, it goes to OnOpenDocument. The function I use is:
<br />
void CCardiacDoc::OnFileOpen()<br />
{<br />
CString path1;<br />
int flags;<br />
CFileDialog fdlg( true, NULL, "dummy entry");<br />
fdlg.m_ofn.lpstrTitle = "Choose directory";<br />
flags = fdlg.m_ofn.Flags;<br />
fdlg.m_ofn.Flags = flags;<br />
if( fdlg.DoModal() == IDOK)<br />
{<br />
path1 = fdlg.m_ofn.lpstrFile;<br />
int i = path1.GetLength();<br />
i -= (int) strlen(fdlg.m_ofn.lpstrFileTitle);<br />
m_dataDirectory = path1.Left(i) + "*";<br />
AfxGetMainWnd()->PostMessage(ID_FILE_NEW, 0, 0);<br />
}<br />
}<br />
It never again reaches OnNewDocument. If I would use ID_FILE_OPEN (which I tried), I would expect it to reach my overridden routine, which it doesn't. I really want it to go to OnNewDocument which I why I assume you had a small typo.
Thanks,
Ilan
|
|
|
|
|
Well see? That's completely different than what you originally asked.
In OnOpenFile(), instead of posting the ID_FILE_OPEN message, try this line instead:
OpenDocumentFile(path1);
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
I didn't explain the whole problem. I don't want to open the file the user gives, just to use the directory he gives (because it actually opens a whole bunch of files, not just a single file).
The problem is, what happens when the user "opens" the same file twice? (i.e. he points to the same directory and picks the same file). Windows says it is open and doesn't open it again. Again the problem is the directory structure can be complicated and I'll have to ask for more help, after he has chosen the directory.
In short, I want to use the New command and then there is no problem with the file already being open. The New command would solve the problem nicely (as it does when the program is started).
Thanks,
Ilan
|
|
|
|
|
If the FileOpen dialog is only used to select a folder, how does the user specify the filename to open? You're still not sufficiently describing your problem.
It looks like you need to completely redesign your file handling if you're having these kinds of issues. Since I don't know what you mean by "opens a whole bunch of files", I can't suggest an alternative file-handling mechanism.
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|