«граница массива не является целочисленной константой» при определении размера массива в классе с использованием элемента константного массива - PullRequest
3 голосов
/ 13 января 2011
#ifndef QWERT_H
#define QWERT_H

const int x [] = {1, 2,};
const int z = 3;
#endif


#include <iostream>
#include "qwert.h"
class Class   
{  
    int y [x[0]];  //error:array bound is not an integer constant
    int g [z];     //no problem  
};


int main ()  
{  

    int y [x[0]];      //no problem
    Class a_class;

}

Я не могу понять, почему это не работает. Другие люди с этой проблемой, похоже, пытаются динамически распределять массивы. Любая помощь очень ценится.

Ответы [ 3 ]

4 голосов
/ 13 января 2011

x - это const (как и z, очевидно), но x [0] не является константным выражением. Объявления массива в определении класса должны иметь спецификаторы постоянного размера.

Подумайте об этом на мгновение; Как вы ожидаете, что оператор sizeof оценит размер вашего класса, если он содержит массив неизвестного размера во время компиляции?

3 голосов
/ 13 января 2011

Основная версия работает, потому что у вашего компилятора есть расширение, позволяющее использовать массивы переменной длины.Доступ к массиву не может быть константными выражениями в C ++ 03, даже если массив и индекс являются константными выражениями, что является источником ошибки.

1 голос
/ 13 января 2011

Размер массива должен быть константным выражением .Я не верю, что константные элементы в массиве квалифицируются как таковые.

Версия в main () работает, вероятно, из-за расширения компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...