Const Multi-Dimentional Array Member Variable

Discussion in 'C++' started by NvrBst, Nov 12, 2008.

  1. NvrBst

    NvrBst Guest

    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.
     
    NvrBst, Nov 12, 2008
    #1
    1. Advertising

  2. NvrBst

    Adem Guest

    "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;
    }
     
    Adem, Nov 13, 2008
    #2
    1. Advertising

  3. NvrBst

    NvrBst Guest

    On Nov 12, 7:15 pm, "Adem" <> 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, Nov 13, 2008
    #3
  4. NvrBst

    NvrBst Guest

    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 '{'")
     
    NvrBst, Nov 13, 2008
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Willem Oosthuizen
    Replies:
    1
    Views:
    2,786
    Jonathan Bromley
    Jul 9, 2003
  2. Michael Neuling
    Replies:
    4
    Views:
    2,918
    Michael Neuling
    Nov 27, 2003
  3. Abby
    Replies:
    2
    Views:
    614
  4. Cedric Baelemans

    2-dimentional array in session variable

    Cedric Baelemans, Jan 9, 2004, in forum: ASP General
    Replies:
    2
    Views:
    114
    Aaron Bertrand - MVP
    Jan 9, 2004
  5. Joan Gu

    multi-dimentional array

    Joan Gu, Mar 25, 2008, in forum: Ruby
    Replies:
    5
    Views:
    132
    Paul Mckibbin
    Mar 27, 2008
Loading...

Share This Page