2016-04-01 15 views
2

私はポインタ宣言の助けが必要です。私はポインタの配列を持ついくつかのクラスを持っています。ポインタの配列にアクセスするためのC++ポインタ宣言

const char* const clsMainWin::mcpszXMLattrRoot[] = {"bottom","left","right","top",NULL}; 
const char* const clsMainWin::mcpszXMLattrA[] = {"x","y","z",NULL}; 

私は何をしたいことは例えば、ポインタの上記配列は、私は単一のインデックスで約のいずれかを選択できるようにするグループポインタを定義している:

const char* const allOptions[] = {mcpszXMLattrRoot, mcpszXMLattrA}; 

どこ:

allOptions[0][...] would be used to access mcpszXMLattrRoot and its contents: 
allOptions[1][...] would be used to access mcpszXMLattrA and its contents 

これまでのところ、私はallOptionsの宣言を正しくするのに苦労しています。

+0

あなたは本当にそれをすることはできませんなぜなら、 'mcpszXMLattrRoot'と' mcpszXMLattrA'は異なる型なので、同じ配列にそれらを集めることができないからです。 'mcpszXMLattrRoot'の型は' const char * const [5] 'ですが、' mcpszXMLattrA'の型は 'const char * const [4]'です。配列内の要素の数は型の一部であり、配列には同じ型の要素しか含めることができません。 –

+0

これはC++の質問であり、Cの質問ではありません。 'c'タグを削除してください – user3629249

答えて

2

あなたはすなわちconst char * const *mcpszXMLattrRootmcpszXMLattrAのポインタを格納することができます。

const char* const * allOptions[] = {mcpszXMLattrRoot, mcpszXMLattrA}; 
2
static const char* const a[] = {"a1", "a2", "a3"}; 
static const char* const b[] = {"b1", "b2", "b3", "b4"}; 
static const char* const* const z[] = {a, b}; 

それがcharのポインタの配列へのポインタの配列であるため、zの種類が追加*を持っている。

bはconst。 constantnessがなければ、次のようになります。

static const char* a[] = {"a1", "a2", "a3"}; 
static const char* b[] = {"b1", "b2", "b3", "b4"}; 
static const char** z[] = {a, b}; 

あなたはconstexpr

class Foo { 
    static constexpr const char* const a[] = {"a1", "a2", "a3"}; 
    static constexpr const char* const b[] = {"b1", "b2", "b3", "b4"}; 
    static constexpr const char* const* z[] = {a, b}; 
}; 

またはアウトクラスでクラスを初期化することができます。

class Foo { 
    static const char* const a[]; 
    static const char* const b[]; 
    static const char* const* z[]; 
}; 

const char* const Foo::a[] = {"a1", "a2", "a3"}; 
const char* const Foo::b[]= {"b1", "b2", "b3", "b4"}; 
const char* const* Foo::z[] = {a, b}; 
+0

これを試してみてください:const char * const * clsMainWin :: mcppAttributes [] – SPlatten

+0

この回答は単一のインデックスではアクセスできません。 – Peter

0

これはのように達成することができます:

class clsMainWin{ 
    static const char* const mcpszXMLattrRoot[5]; 
    static const char* const mcpszXMLattrA[4]; 
    static const char* const *allOptions[2]; 

    // And other things.... 

}; 

const char* const clsMainWin::mcpszXMLattrRoot[] = {"bottom","left","right","top",NULL}; 
const char* const clsMainWin::mcpszXMLattrA[] = {"x","y","z",NULL}; 
const char*const * clsMainWin::allOptions[2] = {mcpszXMLattrRoot, mcpszXMLattrA};