Первый размер Негабаритный член класса

У меня есть класс, который я конвертирую:

class MyClass
{
public::
void foo( void )
{
static const char* bar[][3] = { NULL };
func( bar );
}
};

Теперь я хочу сделать bar переменной-членом, но из-за того, что первое измерение не имеет размера, я не могу. Я тоже не могу пройти const char** bar[3] в void func( const char* param[][3] ), Есть ли обходной путь для этого, о котором я не знаю, или это ситуация, когда я должен использовать метод static?

Изменить в ответ на Jarod42

Соответствие инициализации bar моя проблема здесь Я думаю, что я должен по крайней мере быть в состоянии сделать это в теле ctor, если не в списке инициализации ctor. Вот некоторый тестовый код:

static const char* global[][3] = { NULL };

void isLocal( const char* test[][3] )
{
// This method outputs" cool\ncool\nuncool\n
if( test == NULL )
{
cout << "uncool" << endl;
}
else if( *test[0] == NULL )
{
cout << "cool" << endl;
}
}

class parent
{
public:
virtual void foo( void ) = 0;
};

parent* babyMaker( void )
{
class child : public parent
{
public:
virtual void foo( void )
{
static const char* local[][3] = { NULL };

isLocal( local );
isLocal( global );
isLocal( national );
}
child():national( nullptr ){}
private:
const char* (*national)[3];
};
return new child;
}

int main( void )
{
parent* first = babyMaker();
first->foo();
}

0

Решение

const char* bar[][3] не является const char** bar[3] но const char* (*bar)[3],
Так что вы можете захотеть что-то вроде:

class MyClass
{
public:
MyClass() : bar(nullptr) {}

void foo() { func(bar); }
private:
const char* (*bar)[3];
};

Я предлагаю использовать typedef как:

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

или же:

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];
};
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]