Const Multi-Dimentional Array Member Variable

  • Follow


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.
0
Reply nvrbst (20) 11/12/2008 10:29:20 PM

"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;
  }

0
Reply for-usenet-5c (10) 11/13/2008 3:15:28 AM


On Nov 12, 7:15=A0pm, "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:
> > =A0 =A0MyClass();
> > =A0 =A0virtual ~MyClass();
> > private:
> > =A0 =A0const char* const m_navi[1][1];
> > };
>
> > #endif /*MYMENU_H_*/
> > ----------
>
> > ---MyClass.cpp---
> > #include "MyClass.h"
>
> > MyClass::Myclass() {
> > =A0 =A0m_navi =3D { {"1"} };
> > }
>
> > MyClass:~MyClass() {
> > }
> > ----------
>
> > 1. =A0I get an "expected ';' before '{' token" error at the "m_navi =3D=
 {"
> > line. =A0I also get an "uninitalized member "Myclass::t" error.
> > 2. =A0If I change "m_navi =3D {" to "MyClass::m_navi =3D {" I get the s=
ame
> > errors as "1.".
> > 3. =A0I've tried declaring it in the header file directly (const char*
> > const m_navi[1][1] =3D { {"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]
> > =3D { {"1"} };) and get the same errors as "3."
> > 5. If I move the (const char* const m_navi[1][1] =3D { {"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? =A0Assuming the above "MyClass.h" and
> > "MyClass.cpp" files? =A0Thanks
>
> > 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. =A0g++ Version
> > "4.2.4". =A0Thanks.
>
> You have a typo in your source ("Myclass" vs. "MyClass") =A0:-)
> One of the possible solutions would be the following:
>
> // in header file:
> class MyClass
> =A0 {
> =A0 =A0 public:
> =A0 =A0 =A0 MyClass() {}
> =A0 =A0 =A0 virtual ~MyClass() {}
> =A0 =A0 private:
> =A0 =A0 =A0 static const char* const m_navi[1][1];
> =A0 =A0};
>
> // the following must not be placed in the header file:
> const char* const MyClass::m_navi[1][1] =3D { { "1" } }; =A0 // static in=
it
>
> int main()
> =A0 {
> =A0 =A0 MyClass m;
> =A0 =A0 return 0;
> =A0 }

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.
0
Reply nvrbst (20) 11/13/2008 6:42:55 PM

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 '{'")
0
Reply nvrbst (20) 11/13/2008 9:02:01 PM

3 Replies
16 Views

(page loaded in 0.087 seconds)

Similiar Articles:











7/26/2012 2:20:27 PM


Reply: