Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gl1234
0 / 0 / 0
Регистрация: 05.04.2011
Сообщений: 4
#1

variably modified type - C++

05.04.2011, 22:08. Просмотров 435. Ответов 4
Метки нет (Все метки)

Привет всем. Нужна помощь в решении проблемы с variably modified type в объявлении переменной по шаблону.
О чем в общем. Есть некая структура, которая содержит размер строки ( char[n] ), нужно обьявить переменную типа другой структуры с шаблоном типа.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//код не с программы, просто как пример.
//в коде some_struct содержится в vector в классе, но это, по моему, роли не играет.
struct some_struct {
unsigned int size;
};
 
template <typename TypeX>
struct common_struct {
TypeX val;
};
some_struct s;
s.size=10;
common_struct<char[(int)s.size]> x;
Но компилятор выкидывает ошибку.
Код
error: 'char [(((unsigned int)(((int)_переменная_ + -0x000000001)) + 1)]' is a variably modified type
error:   trying to instantiate 'template<class TypeX> struct common_struct'
error: invalid type in declaration before ';' token
Создание новой переменной, и записывание туда размера ничего не дает. Если создать переменную типа int x=3; а потом её подставить - все работает.
Перерыл интернет на подобные ошибки - ничего толкового не нашел, только http://stackoverflow.com/questions/3...-modified-type , где решения я не нашел. В общем ошибка понятна, невозможно создать переменную типа по шаблону со значением с переменной. Нужно как-то привести тип переменной к не variably modified type. К слову, эта переменная крутится в цикле, поэтому нужно её переприсваивать, или удалять.

Компилятор -
Код
gcc (gcc-4.5.2-1-mingw32)
g++ (gcc-c++-4.5.2-1-mingw32)
mingw32-make (make-3.82-5-mingw32)
Заранее спасибо за любое решение.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2011, 22:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос variably modified type (C++):

E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'Binary' - C++
Здравствуйте, уважаемые форумчане, выкидываю код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;windows.h&gt; class Binary { ...

Incomplete type used in nested type specifier - Итерация по списку аргументов - C++
Здравствуйте! Пытаюсь написать утилитарную структуру для применения шаблонной функции на списке аргументов. #include &lt;tuple&gt; ...

С++ not implemented in type 'istream' for arguments of type 'float *'из-за чего эта ошибка и как исправить? - C++
Написал программу для расчёта площади четырёхугольника и круга. Использовал простые операторы присвоения. Всё работало как надо. Но...

Could not convert variant of type (Null) into type (String) - C++
if(DBLookupComboBoxDoctor-&gt;ListField.IsEmpty()) ...

Mix of type 'bool' and type 'float' - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { float x,y,i; for(i=1;i&lt;5;++i) { ...

Argument of type char is incompatible with parameter of type char * - C++
Столкнулся с ошибкой, не получается никак исправить #define DUTIES 100 class POSITIONDLL_API Position { private: char...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.04.2011, 22:15 #2
gl1234, во-первых, при указании размера массивов необходима константа. Во-вторых, Вы лучше о стоящей перед Вами задаче расскажите, а то код приведенный выше, мягко говоря, внушает опасения.
0
gl1234
0 / 0 / 0
Регистрация: 05.04.2011
Сообщений: 4
05.04.2011, 22:26  [ТС] #3
Задача описана как есть.
Код весь великоват.
Есть размер char[n] записанный в структуре, которая записана в массив в классе. Нудно создать переменную типа common_struct<char[n]> x; , где n - размер (как показано в примере).
Другого варианта реализации этого кода не может быть, есть как есть.
Можно как-то привести тип к const int, если она содержится в структуре / классе / массиве ? обычное приведение ((const int)var) не помогает.
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.04.2011, 22:35 #4
gl1234, что мешает вместо массива символов использовать std::string?
0
gl1234
0 / 0 / 0
Регистрация: 05.04.2011
Сообщений: 4
05.04.2011, 22:42  [ТС] #5
это как-бы тип данных с базы char[1-255] (фикс. размер типа). Структура записывается в файл. Для записи используется FILE (хоть и на с++, но использую это, чтобы нормально записывать структуры без извратов). а std::string не представляю как можно записать через FILE в качестве параметра структуры.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2011, 22:42
Привет! Вот еще темы с ответами:

Ошибка: argument of type "char *" is incompatible with parameter of type "LPCWSTR" - C++
Помогите, пожалуйста, исправить ошибку в программе. #include &lt;iostream&gt; #include &quot;stdio.h&quot; #include &quot;windows.h&quot; #include &lt;conio.h&gt; ...

Классы: ка победить ошибку из "const Type" в "Type &" - C++
Создаю свой класс class MyClass {private: int *dat; WCHAR *buf; inline size_t GetLength(){return dat? dat: 0;}; public: ...

Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *" - C++
Задача состоит в том, чтобы на основе текстовых файлов сделать подобие базы данных. Есть 3 связанных таблицы: группы, студенты, оценки. ...

Db does not a name type - C++
Всем привет. Бьюсь второй день с ошибкой. Есть файл database.h #ifndef DATABASE_H_INCLUDED #define DATABASE_H_INCLUDED ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.04.2011, 22:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru