c++.mfc - problems with MFC CArray<,>
- Andy C <Andy_member pathlink.com> Jul 23 2003
- "Walter" <walter digitalmars.com> Jul 23 2003
- Jan Knepper <jan smartsoft.us> Jul 23 2003
- Andy C <Andy_member pathlink.com> Jul 23 2003
- Jan Knepper <jan smartsoft.us> Jul 23 2003
- Andy C <Andy_member pathlink.com> Jul 23 2003
- Jan Knepper <jan smartsoft.us> Jul 23 2003
- Andy C <Andy_member pathlink.com> Jul 23 2003
- Jan Knepper <jan smartsoft.us> Jul 23 2003
- Andy C <Andy_member pathlink.com> Jul 27 2003
- Andy C <Andy_member pathlink.com> Aug 11 2003
- Dhayanidhi <Dhayanidhi_JR Yahoo.Com> May 24 2007
I am having problems using the MFC template CArray. I am trying to create a CArray of a structure, nothing fancy, and I cannot get it to compile. I have used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>. The problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
Jul 23 2003
"Andy C" <Andy_member pathlink.com> wrote in message news:bfmaki$1f1q$1 digitaldaemon.com...I am having problems using the MFC template CArray. I am trying to create
CArray of a structure, nothing fancy, and I cannot get it to compile. I
used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>.
problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no
Is that all of the error message? It looks truncated.But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
Jul 23 2003
You might have to add afxtempl.h into your stdafx.h Jan Andy C wrote:I am having problems using the MFC template CArray. I am trying to create a CArray of a structure, nothing fancy, and I cannot get it to compile. I have used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>. The problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
-- ManiaC++ Jan Knepper
Jul 23 2003
Sorry, my first post got clipped. Here is the code that is in question:
-----------------------
#include "stdafx.h"
#include <afxtempl.h>
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
struct my_struct
{
int a,b,c;
CString s;
};
void func ()
{
CArray<my_struct,my_struct> ca;
}
----------------------------------
When the above is compiled in DEBUG mode it produces the following error.
Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305):
no match for function '?_P(unsigned ,char *,int )'
When compiled in Release mode, or if I don't declare the variable cd,
there is no error. Any ideas?
Thanks.
Andy
In article <3F1EC94E.72054AC8 smartsoft.us>, Jan Knepper says...
You might have to add afxtempl.h into your stdafx.h
Jan
Andy C wrote:
I am having problems using the MFC template CArray. I am trying to create a
CArray of a structure, nothing fancy, and I cannot get it to compile. I have
used this successfully under VC++ 6.0 so it is probably just a matter of
compiler flags and such. I have the 8.26 CD and have downloaded all the
updates.
In order to use the CArray<,> I need to include the file <afxtempl.h>. The
problem is that if I do include it I get this message:
Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no
But if I do not include the file I get this message:
Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template
match for function '?_P(unsigned ,char *,int )'
Thanks!
Andy
--
ManiaC++
Jan Knepper
Jul 23 2003
Isn't ?_P the mangled name of the overloaded new operator? Andy C wrote:Sorry, my first post got clipped. Here is the code that is in question: ----------------------- #include "stdafx.h" #include <afxtempl.h> #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif struct my_struct { int a,b,c; CString s; }; void func () { CArray<my_struct,my_struct> ca; } ---------------------------------- When the above is compiled in DEBUG mode it produces the following error. Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no match for function '?_P(unsigned ,char *,int )' When compiled in Release mode, or if I don't declare the variable cd, there is no error. Any ideas? Thanks. Andy In article <3F1EC94E.72054AC8 smartsoft.us>, Jan Knepper says...You might have to add afxtempl.h into your stdafx.h Jan Andy C wrote:I am having problems using the MFC template CArray. I am trying to create a CArray of a structure, nothing fancy, and I cannot get it to compile. I have used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>. The problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
-- ManiaC++ Jan Knepper
-- ManiaC++ Jan Knepper
Jul 23 2003
I have no idea, but the offending line in "afxtempl.h" is.... m_pData = (TYPE*) new BYTE[nNewSize * sizeof(TYPE)]; Does this help? Andy In article <3F1EF2D7.AE398D51 smartsoft.us>, Jan Knepper says...Isn't ?_P the mangled name of the overloaded new operator? Andy C wrote:Sorry, my first post got clipped. Here is the code that is in question: ----------------------- #include "stdafx.h" #include <afxtempl.h> #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif struct my_struct { int a,b,c; CString s; }; void func () { CArray<my_struct,my_struct> ca; } ---------------------------------- When the above is compiled in DEBUG mode it produces the following error. Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no match for function '?_P(unsigned ,char *,int )' When compiled in Release mode, or if I don't declare the variable cd, there is no error. Any ideas? Thanks. Andy In article <3F1EC94E.72054AC8 smartsoft.us>, Jan Knepper says...You might have to add afxtempl.h into your stdafx.h Jan Andy C wrote:I am having problems using the MFC template CArray. I am trying to create a CArray of a structure, nothing fancy, and I cannot get it to compile. I have used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>. The problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
-- ManiaC++ Jan Knepper
-- ManiaC++ Jan Knepper
Jul 23 2003
Yes... I think that 'new' should be replaced with DEBUG_NEW. Andy C wrote:I have no idea, but the offending line in "afxtempl.h" is.... m_pData = (TYPE*) new BYTE[nNewSize * sizeof(TYPE)]; Does this help? Andy In article <3F1EF2D7.AE398D51 smartsoft.us>, Jan Knepper says...Isn't ?_P the mangled name of the overloaded new operator? Andy C wrote:Sorry, my first post got clipped. Here is the code that is in question: ----------------------- #include "stdafx.h" #include <afxtempl.h> #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif struct my_struct { int a,b,c; CString s; }; void func () { CArray<my_struct,my_struct> ca; } ---------------------------------- When the above is compiled in DEBUG mode it produces the following error. Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no match for function '?_P(unsigned ,char *,int )' When compiled in Release mode, or if I don't declare the variable cd, there is no error. Any ideas? Thanks. Andy In article <3F1EC94E.72054AC8 smartsoft.us>, Jan Knepper says...You might have to add afxtempl.h into your stdafx.h Jan Andy C wrote:I am having problems using the MFC template CArray. I am trying to create a CArray of a structure, nothing fancy, and I cannot get it to compile. I have used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>. The problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
-- ManiaC++ Jan Knepper
Jul 23 2003
I thought I had the latest updates from the DM web site. Is there a compiler setting? Is this the first you have heard of this? Should I be doing a global replace in the .h files? Please elaborate on this problem. Thanks. Andy In article <3F1EFDAE.DDFBBE12 smartsoft.us>, Jan Knepper says...Yes... I think that 'new' should be replaced with DEBUG_NEW. Andy C wrote:I have no idea, but the offending line in "afxtempl.h" is.... m_pData = (TYPE*) new BYTE[nNewSize * sizeof(TYPE)]; Does this help? Andy In article <3F1EF2D7.AE398D51 smartsoft.us>, Jan Knepper says...Isn't ?_P the mangled name of the overloaded new operator? Andy C wrote:Sorry, my first post got clipped. Here is the code that is in question: ----------------------- #include "stdafx.h" #include <afxtempl.h> #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif struct my_struct { int a,b,c; CString s; }; void func () { CArray<my_struct,my_struct> ca; } ---------------------------------- When the above is compiled in DEBUG mode it produces the following error. Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no match for function '?_P(unsigned ,char *,int )' When compiled in Release mode, or if I don't declare the variable cd, there is no error. Any ideas? Thanks. Andy In article <3F1EC94E.72054AC8 smartsoft.us>, Jan Knepper says...You might have to add afxtempl.h into your stdafx.h Jan Andy C wrote:I am having problems using the MFC template CArray. I am trying to create a CArray of a structure, nothing fancy, and I cannot get it to compile. I have used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>. The problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
-- ManiaC++ Jan Knepper
Jul 23 2003
Andy C wrote:I thought I had the latest updates from the DM web site.
That is very possible. That version comes out of CVS I think and I have not committed changes to CVS in ages... (Lack of interest)Is there a compiler setting?
No for what?Is this the first you have heard of this?
Not sure... certainly have not seen any other questions about this in particular that I remember.Should I be doing a global replace in the .h files?
You could... Now I am thinking about it, it was one or the other... Either MFC redefined new as DEBUG_NEW or instead of new DEBUG_NEW should be used... Sorry, I work so many different things that I would have to look in the header files to see what is actually being done. What they do in the source files is: #define new DEBUG_NEW They do the same in afxtempl.h Than in afx.h: #defne DEBUG_NEW new(THIS_FILE, __LINE__) which I guess should replace 'new' with DEBUG_NEW with new(THIS_FILE,__LINE__) which is what for some reason is not happening in your code as this would require: operator new ( unsigned, char *, int ); which the compiler does not seem to be able to find... Weird...Please elaborate on this problem.
Enough?Thanks. Andy In article <3F1EFDAE.DDFBBE12 smartsoft.us>, Jan Knepper says...Yes... I think that 'new' should be replaced with DEBUG_NEW. Andy C wrote:I have no idea, but the offending line in "afxtempl.h" is.... m_pData = (TYPE*) new BYTE[nNewSize * sizeof(TYPE)]; Does this help? Andy In article <3F1EF2D7.AE398D51 smartsoft.us>, Jan Knepper says...Isn't ?_P the mangled name of the overloaded new operator? Andy C wrote:Sorry, my first post got clipped. Here is the code that is in question: ----------------------- #include "stdafx.h" #include <afxtempl.h> #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif struct my_struct { int a,b,c; CString s; }; void func () { CArray<my_struct,my_struct> ca; } ---------------------------------- When the above is compiled in DEBUG mode it produces the following error. Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no match for function '?_P(unsigned ,char *,int )' When compiled in Release mode, or if I don't declare the variable cd, there is no error. Any ideas? Thanks. Andy In article <3F1EC94E.72054AC8 smartsoft.us>, Jan Knepper says...You might have to add afxtempl.h into your stdafx.h Jan Andy C wrote:I am having problems using the MFC template CArray. I am trying to create a CArray of a structure, nothing fancy, and I cannot get it to compile. I have used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>. The problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
-- ManiaC++ Jan Knepper
Jul 23 2003
Yes, you are correct. The following 5 lines are present in MS VC++ files: #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif However, Now I get the compile error, (even with the compiler setting for allowing new[] and delete[] operator overloading): Error: D:\PROGRAM FILES\DM\BIN\..\include\stddef.h(78): not an overloadable operator token. Any suggestions? (I have access to VC++ and I will start a list of changes to be able to switch from MS to DM and post it as I learn more.) Thanks! Andy In article <3F1F0A70.756826DE smartsoft.us>, Jan Knepper says...Andy C wrote:I thought I had the latest updates from the DM web site.
That is very possible. That version comes out of CVS I think and I have not committed changes to CVS in ages... (Lack of interest)Is there a compiler setting?
No for what?Is this the first you have heard of this?
Not sure... certainly have not seen any other questions about this in particular that I remember.Should I be doing a global replace in the .h files?
You could... Now I am thinking about it, it was one or the other... Either MFC redefined new as DEBUG_NEW or instead of new DEBUG_NEW should be used... Sorry, I work so many different things that I would have to look in the header files to see what is actually being done. What they do in the source files is: #define new DEBUG_NEW They do the same in afxtempl.h Than in afx.h: #defne DEBUG_NEW new(THIS_FILE, __LINE__) which I guess should replace 'new' with DEBUG_NEW with new(THIS_FILE,__LINE__) which is what for some reason is not happening in your code as this would require: operator new ( unsigned, char *, int ); which the compiler does not seem to be able to find... Weird...Please elaborate on this problem.
Enough?Thanks. Andy In article <3F1EFDAE.DDFBBE12 smartsoft.us>, Jan Knepper says...Yes... I think that 'new' should be replaced with DEBUG_NEW. Andy C wrote:I have no idea, but the offending line in "afxtempl.h" is.... m_pData = (TYPE*) new BYTE[nNewSize * sizeof(TYPE)]; Does this help? Andy In article <3F1EF2D7.AE398D51 smartsoft.us>, Jan Knepper says...Isn't ?_P the mangled name of the overloaded new operator? Andy C wrote:Sorry, my first post got clipped. Here is the code that is in question: ----------------------- #include "stdafx.h" #include <afxtempl.h> #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif struct my_struct { int a,b,c; CString s; }; void func () { CArray<my_struct,my_struct> ca; } ---------------------------------- When the above is compiled in DEBUG mode it produces the following error. Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no match for function '?_P(unsigned ,char *,int )' When compiled in Release mode, or if I don't declare the variable cd, there is no error. Any ideas? Thanks. Andy In article <3F1EC94E.72054AC8 smartsoft.us>, Jan Knepper says...You might have to add afxtempl.h into your stdafx.h Jan Andy C wrote:I am having problems using the MFC template CArray. I am trying to create a CArray of a structure, nothing fancy, and I cannot get it to compile. I have used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>. The problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
-- ManiaC++ Jan Knepper
Jul 27 2003
Silly me! The problem with CArray<> was not due to any DEBUG issue, but with the use of new for arrays. Compiling with -Aa- solved the problem. Cheers! Andy C In article <bg1o5q$g8p$1 digitaldaemon.com>, Andy C says...Yes, you are correct. The following 5 lines are present in MS VC++ files: #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif However, Now I get the compile error, (even with the compiler setting for allowing new[] and delete[] operator overloading): Error: D:\PROGRAM FILES\DM\BIN\..\include\stddef.h(78): not an overloadable operator token. Any suggestions? (I have access to VC++ and I will start a list of changes to be able to switch from MS to DM and post it as I learn more.) Thanks! Andy In article <3F1F0A70.756826DE smartsoft.us>, Jan Knepper says...Andy C wrote:I thought I had the latest updates from the DM web site.
That is very possible. That version comes out of CVS I think and I have not committed changes to CVS in ages... (Lack of interest)Is there a compiler setting?
No for what?Is this the first you have heard of this?
Not sure... certainly have not seen any other questions about this in particular that I remember.Should I be doing a global replace in the .h files?
You could... Now I am thinking about it, it was one or the other... Either MFC redefined new as DEBUG_NEW or instead of new DEBUG_NEW should be used... Sorry, I work so many different things that I would have to look in the header files to see what is actually being done. What they do in the source files is: #define new DEBUG_NEW They do the same in afxtempl.h Than in afx.h: #defne DEBUG_NEW new(THIS_FILE, __LINE__) which I guess should replace 'new' with DEBUG_NEW with new(THIS_FILE,__LINE__) which is what for some reason is not happening in your code as this would require: operator new ( unsigned, char *, int ); which the compiler does not seem to be able to find... Weird...Please elaborate on this problem.
Enough?Thanks. Andy In article <3F1EFDAE.DDFBBE12 smartsoft.us>, Jan Knepper says...Yes... I think that 'new' should be replaced with DEBUG_NEW. Andy C wrote:I have no idea, but the offending line in "afxtempl.h" is.... m_pData = (TYPE*) new BYTE[nNewSize * sizeof(TYPE)]; Does this help? Andy In article <3F1EF2D7.AE398D51 smartsoft.us>, Jan Knepper says...Isn't ?_P the mangled name of the overloaded new operator? Andy C wrote:Sorry, my first post got clipped. Here is the code that is in question: ----------------------- #include "stdafx.h" #include <afxtempl.h> #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif struct my_struct { int a,b,c; CString s; }; void func () { CArray<my_struct,my_struct> ca; } ---------------------------------- When the above is compiled in DEBUG mode it produces the following error. Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no match for function '?_P(unsigned ,char *,int )' When compiled in Release mode, or if I don't declare the variable cd, there is no error. Any ideas? Thanks. Andy In article <3F1EC94E.72054AC8 smartsoft.us>, Jan Knepper says...You might have to add afxtempl.h into your stdafx.h Jan Andy C wrote:I am having problems using the MFC template CArray. I am trying to create a CArray of a structure, nothing fancy, and I cannot get it to compile. I have used this successfully under VC++ 6.0 so it is probably just a matter of compiler flags and such. I have the 8.26 CD and have downloaded all the updates. In order to use the CArray<,> I need to include the file <afxtempl.h>. The problem is that if I do include it I get this message: Error: D:\PROGRAM FILES\DM\BIN\..\mfc\include\32-bit\afxtempl.h(305): no But if I do not include the file I get this message: Error: D:\PROJECTS\TESTDLG\CPrompt.h(66): 'CArray' is not a class template match for function '?_P(unsigned ,char *,int )' Thanks! Andy
-- ManiaC++ Jan Knepper
Aug 11 2003
Redine struct as
typedef struct
{
int a,b,c;
CString s;
}my_struct;
or
class my_struct
{
int a,b,c;
CString s;
};
May 24 2007









"Walter" <walter digitalmars.com> 