Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
eekr
0 / 0 / 3
Регистрация: 10.06.2015
Сообщений: 8
#1

Компилятор не хочет компилировать - C++

11.05.2017, 13:21. Просмотров 200. Ответов 3
Метки c++ (Все метки)

Доброго дня. Начинаю изучать составные литералы в c++. Использую Microsoft Visual C++ 2010 Express.
Ниже, собственно, код. Использую я это для хранения и инициализации информации о GUI. Прочитал, что этот способ заменит огромный код, который бы пришлось писать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
enum EParams
{
    // Oscillator Section:
    mOsc1Waveform = 0,
    mOsc1PitchMod,
    mOsc2Waveform,
    mOsc2PitchMod,
    mOscMix,
    // Filter Section:
    mFilterMode,
    mFilterCutoff,
    mFilterResonance,
    mFilterLfoAmount,
    mFilterEnvAmount,
    // LFO:
    mLFOWaveform,
    mLFOFrequency,
    // Volume Envelope:
    mVolumeEnvAttack,
    mVolumeEnvDecay,
    mVolumeEnvSustain,
    mVolumeEnvRelease,
    // Filter Envelope:
    mFilterEnvAttack,
    mFilterEnvDecay,
    mFilterEnvSustain,
    mFilterEnvRelease,
    kNumParams //количество параметров плагина, в данном случае 20
};
 
typedef struct parameterProperties_struct //структура данных для хранения ин-ии для GUI
{
    const char* name;//имя параметра
    const int x;//координаты элемента управления
    const int y;
    const double defaultVal;//параметр по умолчанию
    const double minVal;//мин значение
    const double maxVal;//макс значение
};
 
const parameterProperties_struct parameterProperties[kNumParams] =
{
    {.name = "Osc 1 Waveform", .x=30, .y=75},
    {.name = "Osc 1 Pitch Mod", .x=69, .y=61, .defaultVal=0.0, .minVal=0.0, .maxVal=1.0},
    {.name = "Osc 2 Waveform", .x=203, .y=75},
    {.name = "Osc 2 Pitch Mod", .x=242, .y=61, .defaultVal=0.0, .minVal=0.0, .maxVal=1.0},
    {.name = "Osc Mix", .x=130, .y=61, .defaultVal=0.5, .minVal=0.0, .maxVal=1.0},
    {.name = "Filter Mode", .x=30, .y=188},
    {.name = "Filter Cutoff", .x=69, .y=174, .defaultVal=0.99, .minVal=0.0, .maxVal=0.99},
    {.name = "Filter Resonance", .x=124, .y=174, .defaultVal=0.0, .minVal=0.0, .maxVal=1.0},
    {.name = "Filter LFO Amount", .x=179, .y=174, .defaultVal=0.0, .minVal=0.0, .maxVal=1.0},
    {.name = "Filter Envelope Amount", .x=234, .y=174, .defaultVal=0.0, .minVal=-1.0, .maxVal=1.0},
    {.name = "LFO Waveform", .x=30, .y=298},
    {.name = "LFO Frequency", .x=69, .y=284, .defaultVal=6.0, .minVal=0.01, .maxVal=30.0},
    {.name = "Volume Env Attack", .x=323, .y=61, .defaultVal=0.01, .minVal=0.01, .maxVal=10.0},
    {.name = "Volume Env Decay", .x=378, .y=61, .defaultVal=0.5, .minVal=0.01, .maxVal=15.0},
    {.name = "Volume Env Sustain", .x=433, .y=61, .defaultVal=0.1, .minVal=0.001, .maxVal=1.0},
    {.name = "Volume Env Release", .x=488, .y=61, .defaultVal=1.0, .minVal=0.01, .maxVal=15.0},
    {.name = "Filter Env Attack", .x=323, .y=174, .defaultVal=0.01, .minVal=0.01, .maxVal=10.0},
    {.name = "Filter Env Decay", .x=378, .y=174, .defaultVal=0.5, .minVal=0.01, .maxVal=15.0},
    {.name = "Filter Env Sustain", .x=433, .y=174, .defaultVal=0.1, .minVal=0.001, .maxVal=1.0},
    {.name = "Filter Env Release", .x=488, .y=174, .defaultVal=1.0, .minVal=0.01, .maxVal=15.0}
};
При компиляции возникает ряд ошибок, одинаковых для каждого из параметров в const parameterProperties_struct parameterProperties[kNumParams]:

- error C3852: 'parameterProperties_struct::x' having type 'const int': aggregate initialization could not initialize this member
- error C2512: 'parameterProperties_struct:arameterProperties_struct' : no appropriate default constructor available
- error C2078: too many initializers
- error C2143: syntax error : missing '}' before '.'
- error C2073: 'parameterProperties' : elements of partially initialized array must have a default constructor
- error C2512: 'parameterProperties_struct' : no appropriate default constructor available
- error C2143: syntax error : missing ';' before '.'
- error C2059: syntax error : '.'
- error C2143: syntax error : missing ';' before '}'
- error C2447: '{' : missing function header (old-style formal list?)
- IntelliSense: expected an expression

Как лечит этот код?)
Подскажите, где может быть подводный камень и как его вытащить?
Заранее спасибо, всем кто обратит внимание. Вы поможете написать диплом
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2017, 13:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Компилятор не хочет компилировать (C++):

НЕ хочет компилировать
Найдите пожалуйста ошибку, и можете объяснимть почему void mul( int x, int y)...

Не хочет компилировать часть сервер
Проблема с компиляцией...

Visual c++ не хочет компилировать, в отличие от MinGW
Вообщем есть такой код(решение на 10 упражнение к главе 5 книги Прата)....

чего хочет компилятор?
const double radius = 5.0; struct point { double x; double y; };...

Не пойму чего хочет компилятор
Вот значит перепечатал буква в букву с книги Страуструпа такой код в main() ....

Компилятор не хочет читать функиции.
Мой компилятор когда я визываю функцию пишет ошибку. Скажите что делать.

3
DU3
281 / 233 / 114
Регистрация: 07.09.2016
Сообщений: 587
11.05.2017, 13:33 #2
Лучший ответ Сообщение было отмечено eekr как решение

Решение

странная какая-то инициализация. где вы такую видели
вот:
C++
1
2
3
4
5
6
7
8
9
10
struct S
{
  int x;
  const char* p;
};
 
S arr[2] = {
  {0, "d"},
  {1, "dd"}
};
никаких имен не указано. они должны быть в том же порядке, как и в структуре.
1
eekr
0 / 0 / 3
Регистрация: 10.06.2015
Сообщений: 8
12.05.2017, 10:34  [ТС] #3
Т.е. вы такое не встречали?

Вот описание этого
Подобный синтаксис с фигурными скобками {} это относительно новый прием в C/C++, который называется «составные литералы» Основная идея в том, что так можно инициализировать структуры и массивы. Внешние скобки инициализируют массив parameterProperties[], они содержат разделенный запятыми список составных литералов, каждый из которых инициализирует одну parameterProperties_struct. Давайте разберем это на примере первого литерала:

C
1
{.name="Osc 1 Waveform", .x=30, .y=75}

Старым подходом было бы написать так:

C++
1
2
3
4
parameterProperties_struct* osc1Waveform_prop = parameterProperties[mOsc1Waveform];
osc1Waveform_prop->name = "Osc 1 Waveform";
osc1Waveform_prop->x = 30;
osc1Waveform_prop->y = 75;

Это пришлось бы делать для каждого параметра!
«Классический» подход к составным литералам для структур struct выглядит так:

C++
1
{"Osc 1 Waveform", 30, 75}

Очень лаконично, но подвержено ошибкам. Если добавить что-нибудь в начало struct или изменить порядок следования элементов, появятся проблемы. Лучше использовать назначенные инициализаторы, хоть и придется больше печатать. Это чудовищное словосочетание просто обозначает, что можно обращаться к элементам struct, используя синтаксис .membername=. В конечном виде это немного похоже на JSON или хэши в Ruby:

C
1
{.name="Osc 1 Waveform", .x=30, .y=75}

Добавлено через 14 часов 7 минут
Спасибо большое за разъяснение)
0
MrGluck
Модератор
Эксперт CЭксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,241
12.05.2017, 14:28 #4
eekr, данный подход (designated initializers) имеет место в C (C99), но в С++ его так и не завезли.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2017, 14:28
Привет! Вот еще темы с решениями:

Компилятор не хочет создавать экземпляр класса
И пишет непонятные ошибки. В чем дело? template<class T>//шаблон класса...

Компилятор не хочет принимать функцию dalay()/Sleep() и т.д
Доброго времени суток, компилятор не принимает функции delay() или Sleep(),...

Вещественные числа. Компилятор задаёт как хочет
Есть функция: Написал код: #include "stdafx.h" #include <iostream>...

Компилятор (wxDev-C++) не хочет воспринимать тип string
Я начинающий, и только недавно начал изучать С++ по книге С. Девиса "С++ для...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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