|
|
Const Multi-Dimentional Array Member Variable
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)
|
|
|
|
|
|
|
|
|