Array Variable initialization
-
Hi! I've initialized an Array element in the Constructor. But it shows syntax error. TModels[1](0); The error is: error C2059: syntax error : '[' How to initialize an array element in the Constructor?
-
Hi! I've initialized an Array element in the Constructor. But it shows syntax error. TModels[1](0); The error is: error C2059: syntax error : '[' How to initialize an array element in the Constructor?
can you show your constructor please ?
T.RATHA KRISHNAN wrote:
TModels[1](0);
this line makes absolutely no sense, and i don't even know what you're trying to achieve with this. BTW, can't you just use the STL ans its containers ?
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
-
can you show your constructor please ?
T.RATHA KRISHNAN wrote:
TModels[1](0);
this line makes absolutely no sense, and i don't even know what you're trying to achieve with this. BTW, can't you just use the STL ans its containers ?
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
Thanks. I've corrected this error myself.
-
Thanks. I've corrected this error myself.
and for the benefit of everyone, will you share this with us ?
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
-
Hi! I've initialized an Array element in the Constructor. But it shows syntax error. TModels[1](0); The error is: error C2059: syntax error : '[' How to initialize an array element in the Constructor?
I think you are trying to do something like this.. class A{ int TModels[3]; public: A():TModels[1](0){} }; int main(){ A a; } which is giving you above error: As per my knowledge there is no (standard) C++ way of doing this. Array initializers do not exist for classes. So prob you can do it somewhat like this: class A{ int TModels[3]; public: A(){ for(int i=0; i<3; i++) TModels[i] = 0; } }; int main(){ A a; } Hope it helps you
-
and for the benefit of everyone, will you share this with us ?
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
Oh! With Pleasure! First I initialized the array elements like this:
TestAI::TestAI() //Constructor
TModels[1](0)
, TModels[2](0)
, TModels[3](0)
{}
and now I change it to the following:
TestAI::TestAI() //Constructor
{
TModels[1] = 0;
TModels[2] = 0;
TModels[3] = 0;}
and the errors vanished.
-
I think you are trying to do something like this.. class A{ int TModels[3]; public: A():TModels[1](0){} }; int main(){ A a; } which is giving you above error: As per my knowledge there is no (standard) C++ way of doing this. Array initializers do not exist for classes. So prob you can do it somewhat like this: class A{ int TModels[3]; public: A(){ for(int i=0; i<3; i++) TModels[i] = 0; } }; int main(){ A a; } Hope it helps you
Thanks. I've already corrected that.
-
Oh! With Pleasure! First I initialized the array elements like this:
TestAI::TestAI() //Constructor
TModels[1](0)
, TModels[2](0)
, TModels[3](0)
{}
and now I change it to the following:
TestAI::TestAI() //Constructor
{
TModels[1] = 0;
TModels[2] = 0;
TModels[3] = 0;}
and the errors vanished.
why don't you just do this :
TModel = {0};
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
-
why don't you just do this :
TModel = {0};
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
Because it doesn't work? For instance
int a[50] = {0};
Doesn't produce the result I'm expecting (it initializes only the first array element). Am i wrong? :)
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
Because it doesn't work? For instance
int a[50] = {0};
Doesn't produce the result I'm expecting (it initializes only the first array element). Am i wrong? :)
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]CPallini wrote:
Am i wrong?
you are, or the compiler is ! the standard says that such a construction (when initializing a variable at the same time than declaration) initializes every element of the array to their default value. I'm even pretty sure Nemanja Trifunovic quoted me somewhere about that...
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
-
Because it doesn't work? For instance
int a[50] = {0};
Doesn't produce the result I'm expecting (it initializes only the first array element). Am i wrong? :)
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]CPallini wrote:
(it initializes only the first array element).
Not according to the
STOSx
instructions. Of course, I only use it to initialize POD types to0
. Otherwise, I'd usememset()
."Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
-
CPallini wrote:
Am i wrong?
you are, or the compiler is ! the standard says that such a construction (when initializing a variable at the same time than declaration) initializes every element of the array to their default value. I'm even pretty sure Nemanja Trifunovic quoted me somewhere about that...
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
toxcct wrote:
you are, or the compiler is !
Maybe the latter: the program:
#include <iostream>
using namespace std;void main()
{
const int N = 10;
int a[N]={7};for (int i=0; i<N;i++)
{
cout << a[i] << endl;
}
}the output:
7
0
0
0
0
0
0
0
0
0The system:
Visual C++ 2008 Express Edition
running onWin XP
. Eventually YOU may be wrong! ;P (actually I'm quite confident you're right, but don't use it unless you really want surprises!) [added] Actually I thinkVS2008
cannot be so out-of-the-standard. I suppose the standard establishing that, whenever the initialization list is too short, the remaining array items are default-initialized (to0
if integers). [/added] :)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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]modified on Tuesday, September 9, 2008 11:53 AM
-
CPallini wrote:
(it initializes only the first array element).
Not according to the
STOSx
instructions. Of course, I only use it to initialize POD types to0
. Otherwise, I'd usememset()
."Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
Sorry no
STOS
here:...
const int N = 10;
int a[N]={7};
00401003 xor eax,eax
00401005 push esi
00401006 mov dword ptr [esp+8],7
0040100E mov dword ptr [esp+0Ch],eax
00401012 mov dword ptr [esp+10h],eax
00401016 mov dword ptr [esp+14h],eax
0040101A mov dword ptr [esp+18h],eax
0040101E mov dword ptr [esp+1Ch],eax
00401022 mov dword ptr [esp+20h],eax
00401026 mov dword ptr [esp+24h],eax
0040102A mov dword ptr [esp+28h],eax
0040102E mov dword ptr [esp+2Ch],eax
...(
Visual C++ 2008 Express Edition, Win XP
). :)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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
toxcct wrote:
you are, or the compiler is !
Maybe the latter: the program:
#include <iostream>
using namespace std;void main()
{
const int N = 10;
int a[N]={7};for (int i=0; i<N;i++)
{
cout << a[i] << endl;
}
}the output:
7
0
0
0
0
0
0
0
0
0The system:
Visual C++ 2008 Express Edition
running onWin XP
. Eventually YOU may be wrong! ;P (actually I'm quite confident you're right, but don't use it unless you really want surprises!) [added] Actually I thinkVS2008
cannot be so out-of-the-standard. I suppose the standard establishing that, whenever the initialization list is too short, the remaining array items are default-initialized (to0
if integers). [/added] :)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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]modified on Tuesday, September 9, 2008 11:53 AM
-
Sorry no
STOS
here:...
const int N = 10;
int a[N]={7};
00401003 xor eax,eax
00401005 push esi
00401006 mov dword ptr [esp+8],7
0040100E mov dword ptr [esp+0Ch],eax
00401012 mov dword ptr [esp+10h],eax
00401016 mov dword ptr [esp+14h],eax
0040101A mov dword ptr [esp+18h],eax
0040101E mov dword ptr [esp+1Ch],eax
00401022 mov dword ptr [esp+20h],eax
00401026 mov dword ptr [esp+24h],eax
0040102A mov dword ptr [esp+28h],eax
0040102E mov dword ptr [esp+2Ch],eax
...(
Visual C++ 2008 Express Edition, Win XP
). :)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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]CPallini wrote:
00401003 xor eax,eax
Look two lines up from this one and you should find:
rep stosd
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
-
CPallini wrote:
00401003 xor eax,eax
Look two lines up from this one and you should find:
rep stosd
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
No luck (there isn't such insruction). On the other hand, the output of this program [^] confirms my assumption. See also Sandip's post [^]. I should admit I was very surprised by such a behaviour. :)
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
SandipG :) wrote:
Same output with Visual C++ 6.0
Visual C++ is not what a decent programmer call a standard compliant compiler, Sir !
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
-
No luck (there isn't such insruction). On the other hand, the output of this program [^] confirms my assumption. See also Sandip's post [^]. I should admit I was very surprised by such a behaviour. :)
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]and what about {0} instead of {7}, and in Release Mode, not in Debug Mode ?
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
-
and what about {0} instead of {7}, and in Release Mode, not in Debug Mode ?
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
See my added remark here [^]. BTW my tests were of course performed both in
Debug
and theRelease
mode. ;P :)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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
and what about {0} instead of {7}, and in Release Mode, not in Debug Mode ?
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
toxcct wrote:
...and what about {0} instead of {7}...
0
works fine.toxcct wrote:
...and in Release Mode, not in Debug Mode ?
Same results for both
0
and7
. This is why I only do it when setting things to0
. I usememset()
otherwise."Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch