const char* bar[][3]
is not const char** bar[3]
but const char* (*bar)[3]
.
So you may want something like:
class MyClass
{
public:
MyClass() : bar(nullptr) {}
void foo() { func(bar); }
private:
const char* (*bar)[3];
};
I suggest to use typedef
as:
class MyClass
{
public:
typedef const char* bar_t[3];
public:
MyClass() : bar(new bar_t[2]) {
for (int j = 0; j != 2; ++j) {
for (int i = 0; i != 3; ++i) {
bar[j][i] = nullptr;
}
}
}
~MyClass() { delete [] bar; }
void foo() { func(bar); }
private:
MyClass(const MyClass&); // rule of three
MyClass& operator =(const MyClass&); // rule of three
private:
bar_t* bar;
};
or:
class MyClass
{
public:
typedef const char* bar_t[3];
public:
MyClass() { for (int i = 0; i != 3; ++i) { bar[0][i] = nullptr; } }
void foo() { func(bar); }
private:
bar_t bar[1];
};