2013-09-26 2 views
0

Здесь я пытаюсь создать-структуру с key[2*d] и ptr[2*d+1], но компилятор дает ошибку с этими строками кода только говоря:с использованием глобальных переменным дают ошибку

"error:data members may not have variably modified type."

Я хочу использовать «D» только в моем коде. Теперь, как это исправить.

#include<iostream> 
using namespace std; 
static int d=1; 

struct Btree{ 
    public: 
    int key[2*d]; 
    int count; 
    Btree *ptr[2*d+1]; 
    Btree *pptr; 
}; 
+0

Массивы переменной длины не допускаются на C++ (но они находятся на C, а некоторые компиляторы имеют расширения для их поддержки). Как определено, 'd' является переменной. – Cornstalks

+0

Добавьте комментарий к моему ответу, если вам нужна дополнительная информация, всегда полезно повышать, если вы одобрите, если бы этого было достаточно. Если это правильно, но не хватает, это всего лишь тик. –

ответ

1

Попробуйте сделать сопзЬ d, если у вас есть C++ 11 использовать constexpr, компилятор расстроен, потому что нет никаких причин, d не может измениться в любой момент. Он рассматривает T [N] как тип, который вы видите (это полезно для оптимизаций), это расстроено, потому что ваши Btrees могут быть не одинаковыми.

Вы могли бы добавить шаблон шаблона int к вашему Btree кстати, тогда он был бы счастлив (учитывая, что integer был constexpr), потому что все вещи из этого шаблона будут одинаковыми, но вы не могли бы смешивать их (Btree < 1> и Btree < 2> не могли бы взаимодействовать, «выполняли функцию, которая явно (через шаблон или иначе) использовала их оба)

Если d может измениться, вы действительно хотите, чтобы на куче.

Смежные вопросы