|
hey guys,
few days ago somebody ask me that where it is mandatory to define copy constructor i.e without making an explicit call we can not solve our problem..
so i need to know what would be that condition as i am also searching for the same from 2-3 days ...
if anybody can help me in getting the answer i'll greateful to him/her..
Thank you
Regards,
Pankaj Sachdeva
|
|
|
|
|
pan_angel wrote: where it is mandatory to define copy construc
It is not mandateroy to define copy c'to. But, it is required to define in cases where, one of member variable is pointer and uses dynamic memory allocation.
class A
{
char *m_pName;
int m_nid;
public:
A(char *pName,int nId)
{
m_pName = new char [strlen(pName)+1] ;
strcpy(m_pName,pName);
nid = nId;
}
~A()
{
delete []m_pName;
m_pName = NULL;
}
};
int main()
{
A aObj("Prasad",1);
A aObj1 = aObj;
}
So should modify your defintion to,
class A
{
char *m_pName;
int m_nid;
public:
A(char *pName,int nId)
{
m_pName = new char [strlen(pName)+1] ;
strcpy(m_pName,pName);
m_nid = nId;
}
A(A& aObj)
{
int nMemoryToAlloacate = strlen(aObj's char pointer);
m_pName = new char [nMemoryToAlloacate + 1] ;
strcpy(m_pName,aObj's char pointer);
m_nid = aObj's m_nid ;
}
~A()
{
delete []m_pName;
m_pName = NULL;
}
};
|
|
|
|
|
Objects can be passed to functions by value or by reference. If they are passed by value, a copy of each object is passed to the function. The default method for creating the copy is memberwise copy (shallow copy). This can be modified by supplying a user-defined copy constructor.
|
|
|
|
|
This is not a C++/CLI question, it should have been asked in the Visual C++ forum. You need a copy constructor when you have a pointer, or whenever you have an object which would automatically only provide a shallow copy, and a deep copy is required.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Hello,
I'm trying to create a Observer functionallity between a unmanaged C++ and a managed C++ Class. My managed C++-Class will be used as a Wrapper Class to connect the unmanaged Code to a C# Class. Now I have a Interface Class in my unmaganed Code and wanted to heritate my Wrapper-Class from it. But there ist the Problem. Its not possible to heritate a managed class from a unmanaged class.
The aim is, that my unmanaged Code has to call a method in managed Code.
Can someone help me to find an other solution?
Thanks
|
|
|
|
|
I did a similar thing with containment. The manaed object contains the unmanaged object and exposes all the same methods but with dot net data types. Each method converts data types of params if nessasary and cals the method on the unmanaged object. See this wonderfull article[^] for a smart pointer template you can use to manage the lifetime of unamanged objects
System.IO.Path.IsPathRooted() does not behave as I would expect
|
|
|
|
|
Thanks for your advice. The smart pointer template works great.
|
|
|
|
|
I am trying to build MagickNet (http://midimick.com/magicknet/) and I am not very familiar with c++ but I got pretty far. I am using VS2005 Express and the Platform SDK 2003 R2 is loaded an configured. I downloaded the source for this project and the source for the ImageMagic and GhostScript code to satisify any requirements that MagickNet needed.
I started this project by clicking on File -> New -> Project from existing code. I hacked away until I could right click on each cpp file and compile it with out errors. I have my configuration for a release build. I don't care for the debug because I only need the release version.
However when I try to build the project I get the following error:
------ Build started: Project: MagickNet, Configuration: Release Win32 ------
Compiling...
Stdafx.cpp
MagickOptions.cpp
MagickNet.cpp
MagickImages.cpp
MagickImage.cpp
MagickGeometry.cpp
MagickColor.cpp
AssemblyInfo.cpp
Linking...
LINK : fatal error LNK1104: cannot open file '.\Release\AssemblyInfo.obj'
Build log was saved at "file://c:\Documents and Settings\cjohnson\My Documents\Visual Studio 2005\Projects\MagickNet\Release\BuildLog.htm"
MagickNet - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
I don't know much about VC++ but it seems like it is not creating the object files. If you need more info I can post off of my command parameters from VS2005 c++ express edition.
Can anyone help me please?
Thanks
|
|
|
|
|
I suspect that ImageMagic is not a .NET program, and you are therefore in the wrong forum. You are using Visual C++, right ? There's a Visual C++ forum. This one is for C++/CLI.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Thanks Christian. I've just posted this in the c++ forum. I am using vc++ but I am building it for a c#/asp.net website. I guess I should have put the horse before the cart.
Thanks,
Craig
|
|
|
|
|
|
Hi,
I was wondering what is the maximum limit (size) of an RWCString. I believe, it used to be 64K with 16 bit plateforms. Is there any limitations in 32 bit and 64 bit plateforms? Will appreciate if you could provide me this info.
THanks
|
|
|
|
|
What is an RWCString ? Are you sure this is a C++/CLI question ?
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
This questions pertains the the Rogue Wave C++ library (tools.h++). Should I be posting this in another section?
Thanks
|
|
|
|
|
OK, then it belongs in the Visual C++ forum, or, better, a forum dedicated to that library.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Dear All,
i have a Unmanaged c++ based Library and i want to use it C#/C++ application(i.e. it expose some c based function .. ).. could some one give some pointer to use unmanaged library in c#/C++.. so that i don't have to provide some extra dll or lib with c#/C++ to my end user....
thanks in advance
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Re
|
|
|
|
|
If you cannot convert the library to a managed-mixed mode assembly, and...
you cannot add another DLL that is a managed-mixed mode assembly, then...
I believe your remaining choice is to use PInvoke or, COM Interop if your library has any COM interfaces, from your managed application project. Keep in mind you can only deal with C API's using PInvoke (exported _cdecl functions) and/or COM interfaces, meaning you will have no access to C++ classes defined in the library from managed code.
IMHO if you cannot convert the original library you should take the option of delivering another DLL that is a managed-mixed-mode assembly.
led mike
|
|
|
|
|
led mike wrote: If you cannot convert the library to a managed-mixed mode assembly
any pointer to do that! i..e converting C++ Library to mixed mode assembly...?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and you
|
|
|
|
|
ThatsAlok wrote: any pointer to do that
No but maybe Google[^] does
If you have the source for the project and the old project was a Visual Studio project then you just open it up in VS2005 and change the project settings to support the managed platform. There is more like #include's etc., all the information is available on msdn.com. I would also guess there is an Article here on Code Project.
Even if you don't have an old VS project, as long as you have the source files you can create a project from scratch and add the source files to it.
led mike
|
|
|
|
|
That's not possible. You can't convert C++ to C#, and you can't have more than one language in your program. Certainly if you could, the two would not be C++ and C#. You need to pinvoke a dll.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
I think that the cleanest way to access unmanaged functionality in .NET(c# or C++/CLI) is to write
a wrapper in C++/CLI. There you will have an extra .dll, but you have bounded all unmanaged code within that
.dll.
|
|
|
|
|
Hi,
I am new to C++. I am used to programming in java and vb. What I am trying to do, just for the fun of it (and to learn c++) is write a poker analyser. What I would like to do is draw a poker table, and to this add controls so that I can receive input from the user. Does anybody know of a good tutorial that I could follow on this type of creation (doesn't have to be a poker table, could be any type of display that accepts input? I already have underlying code, cards, decks, hands etc but haven't been able to figure anything out about interfaces!
Many thanks, sorry if it is a bit vague, Ron
|
|
|
|
|
If you're using C++/CLI, the Graphics class contains all the methods you need, just call Invalidate() whenever you want to draw your form, and handle the forms paint method.
If you're not using C++/CLI, you are in the wrong forum.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Hi all,
I am attempting to create a program that permanently deletes selected file(s) from a hard drive using System::IO::File::Delete(path).
As far as I know this method works as the file is no longer exsistant, at least not in that location any longer. After checking the recycle bin I know that the files are not sent here after calling Delete.
I was just wondering if anyone knew where the deleted files are sent if they are sent anywhere.
Thanx,
7leaf
A 6 pack a day keeps your troubles at bay.
|
|
|
|
|
They aren't sent anywhere. Also remember that the data on the disk isn't "wiped"...its data
locations are just marked as free
I haven't seen any .NET way to delete files to the recycle bin, although the SHFileOperation() API
is always available for that.
"Do you know what it's like to fall in the mud and get kicked... in the head... with an iron boot?
Of course you don't, no one does. It never happens. It's a dumb question... skip it."
|
|
|
|