|
I had to readd the files to my workspace for some odd reason. Thanks for all of your help!
|
|
|
|
|
Can anyone point me in the right direction? I have been building a audio app for a couple of months based on DirectMusic, and I have had problems looping .wavs. I'm loading them into a segment, (after the usual initialisation) setting the length, and specifying looping points, but on play back the segments play the entire file and loop from start to finish.
I suspect I am missing out a setup step, but the documentation is pants, and I can't seem to find any tutorials that deal with this. Any help would be greatly appreciated.
|
|
|
|
|
Theres a container class MyClass<t> which has in it a class MyB (declarted in the h file). I am implementing the constructor of MyB. So in the cpp file does it look like:
MyClass<t>::MyB::MyB()
{
}
?
thanks,
ns
|
|
|
|
|
nss wrote:
MyClass::MyB::MyB()
{
}
That looks correct to me.
Happy Programming!
WWW::CodeProject::BNEACETP
|
|
|
|
|
Appreciate the response.Good to get the go-ahead....
ns
|
|
|
|
|
You're welcome!
Happy Programming!
WWW::CodeProject::BNEACETP
|
|
|
|
|
Hi
I’ve got an ATL control (ActiveX) which currently exposes a property page that is used to manipulate all the properties in the control (This property page is launched in the usual manner by the user activating the ‘Custom Properties’ item in the container).
However, instead of displaying a property page to manipulate my control, I need to execute an arbitrary piece of code that displays a custom built editor dialog. My problem is that I cannot find out how to execute an arbitrary piece of code in response to the user clicking the “(custom)”
button on the control container’s property pane (or a similarly easy method of the user activating the editor).
One approach that I have considered is to create and show the dialog from the property page’s InitDialog handler, then destroy the property sheet after the custom dialog has exited (The problem here is knowing how to close the entire property sheet and not just the page) - I'm sure there must be other approaches to this problem though.
Thanks
|
|
|
|
|
Hi,
I try to overload the = operator on a class like following,
CString nomZone;
CArray<ccomposantzone, ccomposantzone=""> composantsZone;
CZone &operator= (const CZone &zone)
{return CZone(zone.nomZone, &(zone.composantsZone));}
but when I build I get this message :
error C2665: 'CZone::CZone' : none of the 4 overloads can convert parameter 2 from type 'const class CArray<class ccomposantzone,class="" ccomposantzone=""> *'
Any idea could help,
thanks,
Pierre
|
|
|
|
|
Do you have a constructor defined for your CZone class that looks similar to this?:
class CZone
{
CZone( CString strNomZone, CArray* pComposantsZoneArray );
};
Another way to implement operator=() is
const CZone& operator=(const CZone& cZone )
{
nomZone = cZone.nomZone;
composantsZone = cZone.composantsZone;
return *this;
}
____________________________________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. (Rich Cook)
|
|
|
|
|
Your operator= method is flawed in many ways. The most notable flaw is that you are returning a dangling reference. You return a reference to a temporary object - an object which is dead after the operator= has returned.
Second, a operator= should return *this so that you do not break the syntax and semantics of obj1 = obj2 = obj3 /* and so on */ ;
As for your error message: Obviously you do not have a CZone(CString, const CArray*) or CZone(const CString&, const CArray*) constructor. Your parameter, zone is const. Hence zone.nomZone and zone.composantsZone are const too.
--
C'est normal!
|
|
|
|
|
Is there anyway (meaning, any tricks of the trade) by which one can set the size of an array at run time?
I am dealing with a 2-dimensional array, and it just seems a waste to set its size at the maximum, only to know that several times during the running of the program, less than 1/10 its size will be used. (Translated another way: From about a megabyte maximum, to a few dozen bytes minimum.)
Thanks for any insight.
William
Fortes in fide et opere!
|
|
|
|
|
No (unless you can settle with a reallocation of the array). Use a std::vector if you need dynamicity in your "arrays".
--
C'est normal!
|
|
|
|
|
Thanks for replying.
Vector seemed to be the only alternative I know about, but thought someone might know of a clever way to get around the compiler's insistence for a constant integral expression.
William
Fortes in fide et opere!
|
|
|
|
|
std::vector also does a lot of reallocations when it grows, it is just hidden from you. Although you can reduce the number of reallocations needed by using the vector::reserve() function.
Sonork 100.11743 Chicken Little
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
Within you lies the power for good - Use it!
|
|
|
|
|
I'm far from an expert but I do have an idea. When you figure out how much of the array is used for that preticular part of your progam, put those numbers into Variables. From there put the variable names into the line where you specify the size of the array. I have a feeling I have no idea what I'm talking about but it seemed like a good idea. I hope it helps you.
|
|
|
|
|
That only works for stack based arrays. And arrays on the stack is a bad coding practice (except for really small, fixed size arrays). Stack space is precious while heap space is not (not as precious as stack space anyway)
--
C'est normal!
|
|
|
|
|
Thanks for replying.
It's a good thought, but if you're serious about maximizing reuse of your code, you cannot have duplicate codes doing the same thing at different locations in your program just so you can take advantage of what you're suggesting.
William
Fortes in fide et opere!
|
|
|
|
|
If you're thinking of something like this:
size_t x, y;
int bigarray[x][y]; then no, that is illegal because array sizes must be known at compile time. (gcc allows this, but it's a non-standard extension.)
You can build your own array at runtime with lots of new calls though.
--Mike--
Ericahist | CP SearchBar v2.0.2 | Homepage | 1ClickPicGrabber New v2.0.1! | RightClick-Encrypt
"Linux is good. It can do no wrong. It is open source so must be right. It has penguins. I want to eat your brain."
-- Paul Watson, Linux Zombie
|
|
|
|
|
Really?! Bummer. I was so positive that C++ is allowed to create variable length arrays on the stack. I just verified it in VS.NET too.
--
C'est normal!
|
|
|
|
|
If u are dealing with the array like this int arr[x][y] at compile time than by using pointers u can do it at runtime like for one dimensional array int *arr=new int[x];
where x can have any value similarly one can do it for two dimensional array.
Inam
|
|
|
|
|
Thanks for replying.
If you are referring to:
int** ConstructMatrix(const int sz)
{
int** pMtrx = new int *(Matrix)[sz];
return pMtrx;
} Then by passing a value which you are going to assign sz at run time, forget it. It doesn't work.
William
Fortes in fide et opere!
|
|
|
|
|
Im sure, there is no way, because the compiler
needs the arraysize to make the pointer arithmetic right. I spent one or two days on it and found
no solution
then I used a normal array (one dimension)
and made the arithmetics myself.
<br />
for(int n=0;n< m_nFieldCount;n++)<br />
{<br />
for(int m=0;m< m_nFieldCount;m++) <br />
{ <br />
if(m_dRatingMatrix[n*m_nRatingMatrixSize+m]>0) <br />
{ <br />
do some stuf<br />
}<br />
}<br />
}<br />
|
|
|
|
|
|
if you want to allocate a table (whatever its size and its dimension) depending on the datas inside, you don't have other ways to use dynamic allocation. if you are in C, use malloc() , calloc() , realloc() , but be careful, they are non-reantrant functions. if you program in C++, prefer new operator, and even if it sizes you source by adding code lines on the treatment of the memory, you win in the place your datas take in memory...
TOXCCT
|
|
|
|
|
Thanks for replying.
The problem is NOT with the allocation of memory. Operator 'new' makes easy job of that (providing there is enough space on the heap). The problem is getting around the compiler's insistence that the size of the array be known at compile time. That IS the problem!!
The main objective is NOT whether memory is to be statically allocated, or dynamically allocated. The main problem is with the SIZE of the memory I wish to allocate, which the compiler is insisting it MUST know at compile time.
I am trying to find out if there is a way I can let the compiler know that information at run time, which so far it is saying, "NO!!"
William
Fortes in fide et opere!
|
|
|
|