[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

Const Multi-Dimentional Array Member Variable

NvrBst

11/12/2008 10:29:00 PM

I'd like to do something like this but having a problem with the
proper syntax in the constructor, maybe someone knows the correct
syntax?

---MyClass.h---
#ifndef MYCLASS_H_
#define MYCLASS_H_

class MyClass {
public:
MyClass();
virtual ~MyClass();
private:
const char* const m_navi[1][1];
};

#endif /*MYMENU_H_*/
----------

---MyClass.cpp---
#include "MyClass.h"

MyClass::Myclass() {
m_navi = { {"1"} };
}

MyClass:~MyClass() {
}
----------


1. I get an "expected ';' before '{' token" error at the "m_navi = {"
line. I also get an "uninitalized member "Myclass::t" error.
2. If I change "m_navi = {" to "MyClass::m_navi = {" I get the same
errors as "1.".
3. I've tried declaring it in the header file directly (const char*
const m_navi[1][1] = { {"1"} };) and get an "a brace-enclosed
initializer is not allowed here before '{' token" error.
4. I've tried making it static (static const char* const m_navi[1][1]
= { {"1"} };) and get the same errors as "3."
5. If I move the (const char* const m_navi[1][1] = { {"1"} };) into
the "main.cpp" file (above the "int main() {" line) then it compiles
fine and I can use it fine in the main function.

Question: Whats the proper way to assign the (const char* const m_navi
[1][1]) inside the constructor? Assuming the above "MyClass.h" and
"MyClass.cpp" files? Thanks

Note: The member variable can be static if that makes it easier; the
data inside "m_navi" never changes once it is set, and there is only
one instance of "MyClass" ever created; I would like to set the value
inside the constructor though if possible since values in "m_navi"
potentially gets updated between builds, so I'd only have to change
the ".cpp" file, but this isn't 100% nessisary.

I'm using Eclipse 3.2.2, on a Ubuntu 8.10 Machine. g++ Version
"4.2.4". Thanks.
3 Answers

Adem

11/13/2008 3:15:00 AM

0

"NvrBst" wrote:
>
> I'd like to do something like this but having a problem with the
> proper syntax in the constructor, maybe someone knows the correct
> syntax?
>
> ---MyClass.h---
> #ifndef MYCLASS_H_
> #define MYCLASS_H_
>
> class MyClass {
> public:
> MyClass();
> virtual ~MyClass();
> private:
> const char* const m_navi[1][1];
> };
>
> #endif /*MYMENU_H_*/
> ----------
>
> ---MyClass.cpp---
> #include "MyClass.h"
>
> MyClass::Myclass() {
> m_navi = { {"1"} };
> }
>
> MyClass:~MyClass() {
> }
> ----------
>
>
> 1. I get an "expected ';' before '{' token" error at the "m_navi = {"
> line. I also get an "uninitalized member "Myclass::t" error.
> 2. If I change "m_navi = {" to "MyClass::m_navi = {" I get the same
> errors as "1.".
> 3. I've tried declaring it in the header file directly (const char*
> const m_navi[1][1] = { {"1"} };) and get an "a brace-enclosed
> initializer is not allowed here before '{' token" error.
> 4. I've tried making it static (static const char* const m_navi[1][1]
> = { {"1"} };) and get the same errors as "3."
> 5. If I move the (const char* const m_navi[1][1] = { {"1"} };) into
> the "main.cpp" file (above the "int main() {" line) then it compiles
> fine and I can use it fine in the main function.
>
> Question: Whats the proper way to assign the (const char* const m_navi
> [1][1]) inside the constructor? Assuming the above "MyClass.h" and
> "MyClass.cpp" files? Thanks
>
> Note: The member variable can be static if that makes it easier; the
> data inside "m_navi" never changes once it is set, and there is only
> one instance of "MyClass" ever created; I would like to set the value
> inside the constructor though if possible since values in "m_navi"
> potentially gets updated between builds, so I'd only have to change
> the ".cpp" file, but this isn't 100% nessisary.
>
> I'm using Eclipse 3.2.2, on a Ubuntu 8.10 Machine. g++ Version
> "4.2.4". Thanks.

You have a typo in your source ("Myclass" vs. "MyClass") :-)
One of the possible solutions would be the following:

// in header file:
class MyClass
{
public:
MyClass() {}
virtual ~MyClass() {}
private:
static const char* const m_navi[1][1];
};

// the following must not be placed in the header file:
const char* const MyClass::m_navi[1][1] = { { "1" } }; // static init

int main()
{
MyClass m;
return 0;
}

NvrBst

11/13/2008 6:43:00 PM

0

On Nov 12, 7:15 pm, "Adem" <for-usenet...@alicewho.com> wrote:
> "NvrBst" wrote:
>
> > I'd like to do something like this but having a problem with the
> > proper syntax in the constructor, maybe someone knows the correct
> > syntax?
>
> > ---MyClass.h---
> > #ifndef MYCLASS_H_
> > #define MYCLASS_H_
>
> > class MyClass {
> > public:
> >    MyClass();
> >    virtual ~MyClass();
> > private:
> >    const char* const m_navi[1][1];
> > };
>
> > #endif /*MYMENU_H_*/
> > ----------
>
> > ---MyClass.cpp---
> > #include "MyClass.h"
>
> > MyClass::Myclass() {
> >    m_navi = { {"1"} };
> > }
>
> > MyClass:~MyClass() {
> > }
> > ----------
>
> > 1.  I get an "expected ';' before '{' token" error at the "m_navi = {"
> > line.  I also get an "uninitalized member "Myclass::t" error.
> > 2.  If I change "m_navi = {" to "MyClass::m_navi = {" I get the same
> > errors as "1.".
> > 3.  I've tried declaring it in the header file directly (const char*
> > const m_navi[1][1] = { {"1"} };) and get an "a brace-enclosed
> > initializer is not allowed here before '{' token" error.
> > 4. I've tried making it static (static const char* const m_navi[1][1]
> > = { {"1"} };) and get the same errors as "3."
> > 5. If I move the (const char* const m_navi[1][1] = { {"1"} };) into
> > the "main.cpp" file (above the "int main() {" line) then it compiles
> > fine and I can use it fine in the main function.
>
> > Question: Whats the proper way to assign the (const char* const m_navi
> > [1][1]) inside the constructor?  Assuming the above "MyClass.h" and
> > "MyClass.cpp" files?  Thanks
>
> > Note: The member variable can be static if that makes it easier; the
> > data inside "m_navi" never changes once it is set, and there is only
> > one instance of "MyClass" ever created; I would like to set the value
> > inside the constructor though if possible since values in "m_navi"
> > potentially gets updated between builds, so I'd only have to change
> > the ".cpp" file, but this isn't 100% nessisary.
>
> > I'm using Eclipse 3.2.2, on a Ubuntu 8.10 Machine.  g++ Version
> > "4.2.4".  Thanks.
>
> You have a typo in your source ("Myclass" vs. "MyClass")  :-)
> One of the possible solutions would be the following:
>
> // in header file:
> class MyClass
>   {
>     public:
>       MyClass() {}
>       virtual ~MyClass() {}
>     private:
>       static const char* const m_navi[1][1];
>    };
>
> // the following must not be placed in the header file:
> const char* const MyClass::m_navi[1][1] = { { "1" } };   // static init
>
> int main()
>   {
>     MyClass m;
>     return 0;
>   }

Thank you :) That worked dandily. I think I got mixed up since I
kept trying to do it in either the header file, or the ctor. Thanks
once more.

NvrBst

11/13/2008 9:02:00 PM

0

Another Initialization Question if Possible; Kind of relates to the
top. Is there a short hand way to initializat during a new operator?
For example I can do the following:


----- CAN DO -----
const char** FSETUP[2] = {
new const char*[2],
new const char*[4]
}
int main() {
FSETUP[0][0] = "T1";
FSETUP[0][1] = "T2";
//ETC
return 0;
}

----- WOULD LIKE TO DO BUT ERRORS -----
const char** FSETUP[2] = {
new const char*[2] {"T1","T2"},
new const char*[4] {"F1","F2","F3","F4"}
}
int main() {
return 0;
}


It has to stay a jagged array. All examples online I find intalizae
the jagged array the long way, is there a short way to set it when it
is being initialized? The error is "Expected ';' before '{'")