|
Hello,
My project (MSVC++6, SP5) is under MFC and I use templete such as
CMap, CList, CArray, etc.
I also want to use a class that is written under STL, using such as string, vector, etc.
However, when I combine the class into my project, I find the compiler will get errors such as:
=======
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2065: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' : undeclared identifier
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2143: syntax error : missing ')' before ';'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2143: syntax error : missing ')' before ';'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
AcronymExtractorView.cpp
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2065: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' : undeclared identifier
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2143: syntax error : missing ')' before ';'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2143: syntax error : missing ')' before ';'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
MyCrawler.cpp
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2065: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' : undeclared identifier
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2143: syntax error : missing ')' before ';'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2143: syntax error : missing ')' before ';'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
c:\program files\microsoft visual studio\vc98\include\xlocnum(481) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\xlocnum(479) : while compiling class-template member function 'class std::ostreambuf_iterator<char,struct std::char_traits<char=""> > __thiscall std::num_put<char,class std::ostreambuf_itera
tor<char,struct="" std::char_traits<char=""> > >::do_put(class std::ostreambuf_iterator<char,struct std::char_traits<char=""> >,class std::ios_base &,char,long) const'
=======
from google, I find one possible reasons at:
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnarvc/html/msdn_stlfaq.asp
which it says things as:
vector<int, allocator<int="">> iV;
The problem is caused by the consecutive ">>" at the end of the declaration. The solution is to put a space between them, so the above becomes:
is causing the problem.
However, I don't see such thing in my program (at lease no such direct problem as above).
Does anyone know any other possible reasons and how to solve it?
Thanks a lot in advance.
|
|
|
|
|
I find out one additional information:
no matter where, if I include:
#include <iostream>
or
#include <string>
I will get the above errors. but if I include:
#include <vector>
it will be OK.
This is quite strange to me. (I don't know much inside the STL)
Hope someone has any idea of this.
Thanks.
|
|
|
|
|
Sorry, I find the above post does not display right.
See below.
I find out one additional information:
no matter where, if I include:
#include < string >
or
#include < iostream >
I will get the above errors. but if I include:
#include < vector >
it will be OK.
This is quite strange to me. (I don't know much inside the STL)
Why the string include will have problem while vector include is OK? Any difference to the compiler?
Hope someone has any idea of this.
Thanks.
|
|
|
|
|
Could you post a code sample, on how you combine the classes ?
~RaGE();
|
|
|
|
|
I find the class is not long, and
re-coded it into MFC without using STL.
It works now.
But thanks anyway.
(I personaly still think it is the function overload/ride
or namespace problem, especially for < and >, >>, << etc.)
Have a nice day to everyone!~
|
|
|
|
|
Hi,
I must add some report generation to our application. The reports should be customizable via templates. I thought about having some XML/XSL to generate HTML output and to display this output via a CHtmlView. The only problem I have (right now) is that I can't find a way to show the application generated images within the HTML page. Feeding the generated HTML source to the IE is possible via a technique used in the CHTMLWriter class (http://www.beginthread.com/Article/Ehsan/Adding%20HTML%20Content%20to%20the%20WebBrowser%20Control%20Dynamically/)
Showing static images is possible via the res:// protocol, but what about generated images. Is there a simple solution to add callbacks to the IE, so that I can provide the image during the rendering stage?
Writing the images to the disc is a solution, but not an elegant one.
Any ideas?
Thanks
Dirk
|
|
|
|
|
I think that might be supported as an mhtml document.
I'm not sure how far the support for such has yet
gotten.
|
|
|
|
|
MHTML, never heard of this...
searching the web, this could be the solution, but it seems, that Outlook Express is required.
Thanks for the idea.
Dirk
...
Web Archive
When you save a Web page as "Web archive," the Web page saves this information in Multipurpose Internet Mail Extension HTML (MHTML) format with a .mht file extension. All relative links in the Web page are remapped and the embedded content is included in the .mht file, rather than being saved in a separate folder. The absolute references or hyperlinks on the Web page remain unchanged and the .mht file is viewed using Internet Explorer.
MHTML enables you to send and receive Web pages and other HTML documents using e-mail programs such as Microsoft Exchange, Microsoft Outlook, and Microsoft Outlook Express. MHTML enables you to embed images directly into the body of your e-mail messages rather than attaching them to the message.
NOTE: "Web archive" is available only if Outlook Express is installed. The ability to save a Web page as a Web archive file is provided by the Inetcomm.dll file (the Microsoft Internet Messaging API file), which is installed by Microsoft Outlook Express 5.
...
|
|
|
|
|
For a plain old C++ programmer like myself, what benefit would there be for me to upgrade to .NET?
Is the C++ compiler faster?
Is the debugger better?
Is it cooler?
I'd need to convince my boss.... what can you tell me.
|
|
|
|
|
Peter Weyzen wrote:
Is the C++ compiler faster?
NO. It is slower.
Peter Weyzen wrote:
Is the debugger better?
Yes.
Peter Weyzen wrote:
Is it cooler?
Yes, but as I learned early not all of your code will compile without modifications.
John
|
|
|
|
|
Peter Weyzen wrote:
Is the C++ compiler faster?
For the few projects where I have timed the difference between VC6 and VC7, yes, a bit (maybe 5 - 10%)
And the programs it makes runs up to 25% faster
Peter Weyzen wrote:
Is the debugger better?
Well, there's some small things that have been fixed. Overall I really like it, and in day to day use it better than the VC6 debugger, I think.
Peter Weyzen wrote:
Is it cooler?
I love the new IDE, you have to give it a few days, or weeks, but then most people love it, although there's still people that hates it
If you use ATL, ATL7 is way better than ATL3 from VC6. I use it a lot and love it
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
Peter Weyzen wrote:
Is the C++ compiler faster?
i've never timed it. but i don't notice any real difference.
Peter Weyzen wrote:
Is the debugger better?
don't know, because...
Peter Weyzen wrote:
Is it cooler?
i hate the interface and can't stand to use the thinig unless i have to. i do all my development in VC6 and only build in VC7 for customers who need the VC7 versions of our libraries.
there are a few serious bugs in the IDE (those in dependencies checking and in the help system are the two that annoy me the most).
to an old time VC guy like me, the new interface seems like VB Gone Wild. but obviously, some people like the new interface. there does seem to be a lot of cool stuff in there, but i can't bring myself to break away from old faithful VC6.
i'm hoping the next version will fix the bugs, and that the upgrade will be cheap
$0.02
-c
Image tools: ThumbNailer, Bobber, TIFFAssembler
|
|
|
|
|
If you play a bit with templates, it makes a sense then. But I'd wait for the newcoming version (2003), which have to be more compliant.
I have no further info, but it should support also partial template specialization etc. Related to business papers it should be 98% compliant with standard. Personally I am waiting for that (should be soon there)
For current .NET version, my comments, related to using old plain C++:
IDE is much better, especially the Intellisense stuff is enhanced a much (altough nobody is perfect). Except the annoying Dynamic help stuff, always turning on
Good thing is that you can use F12 to find any symbol, without building the symbol database. If the symbol is not present in the current project symbol database, it is able to switch to normal full text search through include directories.
Debugger, I learned with .NET how to use the .pdb files together with dumps - the .NET developer can open the .dmp files from client and then you have the exactly the same situation as your client had when the program crashed - this is a great great thing - this feature saved me a lot of time.
Finally the ATL7 is much better that ATL3, and the STL library is finally updated to something useful.
Bad things is the managing of the multiple projects - if you have more than one project in a "Solution" it will always try to compile the dependent projects, even when the first one collapsed totally
These were my personal opinions to the .NET while using only C++.
|
|
|
|
|
I'd like to thank everyone that commented. It was quite helpful.
We're really a shop of plain old C++. Since we write server software, we can be really bad control freaks. We don't use MFC and we don't use STL -- we're into not being too dependent on Windows... "Fast / Dependable / Debuggable / Controllable" are important things to us. But someday we'll port it....
Anyhow, I do love upgrading to new stuff. And it seems like VisualStudio is getting old. But, for us, it seems that now is not the time to upgrade to the new dev environment.
Thanks again!
|
|
|
|
|
I'm new to programming with Visual C++ and MFC. I've tried to figure this out by myself, but have had no luck. Any help would be appreciated.
I've made an AppWizard application for a RichEdit/Text editor and can't get the file extension when MFC loads the file. I want to change the serialization from RTF to TXT depending on the extension of the file. Do I need to write my own OpenFile procedure, and if so how do I do it?
Thanks
|
|
|
|
|
If your doing this in your serialize function you should be able to do:
CString filename = ar.GetFile()->GetFileName();
char ext[_MAX_EXT];
_splitpath(filename, NULL, NULL, NULL, ext);
You should then have the correct extension in ext.
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
Hi there, I´ve looked through the Shell API doc´s and searched through the MSDN, but cannot find any doc´s about programmatically using the "open with" dialog box. Here´s my problem...
Using ::ShellExecuteEx(...) I´m opening a file (with the path, filename etc.),
I get notification from ::ShellExecuteEx if the associated program was successfully started, or an error if no application is asscoiated with the particular file. On recieving this error, I woukd like to show the "Open with" dialog. Anyone got any ideas?
Thanks in advance
Phil
bum... and I thought I´d got rid of all the bugs
|
|
|
|
|
it's shell32.dll!OpenAs_RunDLL, but i don't know the parameters...
i hope this will help!
|
|
|
|
|
When a date field mapped to the CDateTimeCtrl has no data, the DateTime controls pops up with 12/31/1969 instead of system date. Can this be fixed so that it pops up with current system date?
-Elizabeth
Eilzabeth
|
|
|
|
|
dtCtrl.SetTime();
Regards,
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
I tried this, but it will not work. The time will get saved to the database even with no user interaction to the control. I don't want to save if no change.
-Elizabeth
Eilzabeth
|
|
|
|
|
Elizabeth Chang wrote:
The time will get saved to the database even with no user interaction to the control.
I don't understand. How is it that your date control is tied to a field in the database?
Without knowing anything about what you have there, I'll venture to say that the underlying code detects changes to the controls and sets the record's flag to "Modified" or "Dirty", or something like that.
There's gotta be a way for you to do something like this:
bool bModified = GetModified();
if (date field in database is Null)
dtCtrl.SetTime();
SetModified(bModified);
Regards,
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
I map the field to the control in DoDataExchange(). When an UpdateData(TRUE) is sent, the field is marked as dirty because of SetTime function. The value from the control is saved to the database.
-Elizabeth
Eilzabeth
|
|
|
|
|
In that case, you can do the same thing I explained, but use IsFieldDirty and SetFieldDirty instead of GetModified/SetModified.
Regards,
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
I am not sure if I get it all. I created a class CDateTimeCtrlEx (drived from CDateTimeCtrl) and created a public member variable BOOL m_modified. I have Date fields in almost every form. Am I going to have to do this for each Date field?
--------------begin program code--------------------
void CDateTimeCtrlEx::OnDatetimechange(NMHDR* pNMHDR, LRESULT* pResult)
{
m_modified = TRUE;
*pResult = 0;
}
void CDateTimeCtrlEx::DisplayNullDate()
{
SetTime(&CTime::GetCurrentTime());
SetFormat("''");
}
void CDateTimeCtrlEx::ResetFormat()
{
SetFormat("M'/'dd'/'yyyy");
}
-----------------end program code-------------------
In my application OnDataExchange event:
--------------begin program code--------------------
void CTest_dateView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTest_dateView)
DDX_Control(pDX, IDC_DATETIMEPICKER_END, m_dtEnd);
DDX_Control(pDX, IDC_DATETIMEPICKER_BEGIN, m_dtBegin);
DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_END, m_pSet->m_DATE_END);
DDX_FieldText(pDX, IDC_EDIT_NAME_1, m_pSet->m_NAME_1, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_NAME_2, m_pSet->m_NAME_2, m_pSet);
//}}AFX_DATA_MAP
m_dtBegin.ResetFormat();
if (!m_dtBegin.m_modified && m_pSet->m_DATE_BEGIN == 0)
{
m_dtBegin.DisplayNullDate();
}
else
DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_BEGIN, m_pSet->m_DATE_BEGIN);
m_dtBegin.m_modified = FALSE;
}
-----------------end program code-------------------
Eilzabeth
|
|
|
|
|