C:\Users\Симаков\source\repos\Lerning\Debug\Lerning.exe (процесс 9004) завершает работу с кодом 0. Чтобы автоматически закрывать консоль при остановке отладки, установите параметр "Сервис" -> "Параметры" -> "Отладка" -> "Автоматически закрыть консоль при оста новке отладки". Чтобы закрыть это окно, нажмите любую клавишу:
#include "pch.h"#include <iostream>
struct MyStruct
{
double b;
int a[];
};
int main()
{
MyStruct test = { 0.4,{1,2,3,4,6} };
for (int i = 0; i < 5; i++)
std::cout << test.a[i] << '\n';
std::cout << test.b << '\n';
return0;
}
Разница в том, что в первом случае компилятор не может определить смещение в памяти для второго члена структуры, так как не знает размер массива, а в моем случае, массив объявлен последним и компилятор может четко указать смещение для массива. Другое дело, что объявлять такую структуру надо сразу с инициализацией, иначе компилятор законно вернет ошибку.
У вас структура с вектором так инициализируется? У меня ошибку выдаёт
Да, начиная с С++11 это нормально. Какой у вас компилятор? gcc, clang спокойно кушают, даже не надо указывать стандарт (-std=c++11 или выше). Видимо, вам нужно задать версию стандарта.
Разница в том, что в первом случае компилятор не может определить смещение в памяти для второго члена структуры, так как не знает размер массива, а в моем случае, массив объявлен последним и компилятор может четко указать смещение для массива. Другое дело, что объявлять такую структуру надо сразу с инициализацией, иначе компилятор законно вернет ошибку.
Да, Вы правы. Тупанул.
#include "pch.h"#include <iostream>
struct MyStruct
{
double b;
int a[];
};
int main()
{
//MyStruct test[3] ={ { 0.1,{1,4,6} }, { 0.2, { 1,2,3,6 } }, { 0.4,{1,2,3,8,6} }}; // не работает
MyStruct test = { 0.4,{1,2,3,4,6} }; // работаетfor (int i = 0; i < 5; i++)
std::cout << test.a[i] << '\n';
std::cout << test.b << '\n';
return0;
}
1
2
3
4
6
C:\Users\Симаков\source\repos\Lerning\Debug\Lerning.exe (процесс 9004) завершает
работу с кодом 0.
Чтобы автоматически закрывать консоль при остановке отладки, установите параметр
"Сервис" -> "Параметры" -> "Отладка" -> "Автоматически закрыть консоль при оста
новке отладки".
Чтобы закрыть это окно, нажмите любую клавишу:
эээ в смысле?
В Visual Studio такая картина

Поменяйте местами массив и переменную в структуре.
какая разница
Имхо если массив не очень большой, то можно пользоваться классом динамического массива, в частности CArrayInt.
Вот что-то наподобие:
Конструктор копирования и оператор присваивания нужно самому будет придумать...МКЛ массив[] != c++ массив[], это совсем другое, вам нужен vector
какая разница
Разница в том, что в первом случае компилятор не может определить смещение в памяти для второго члена структуры, так как не знает размер массива, а в моем случае, массив объявлен последним и компилятор может четко указать смещение для массива. Другое дело, что объявлять такую структуру надо сразу с инициализацией, иначе компилятор законно вернет ошибку.
Имхо если массив не очень большой, то можно пользоваться классом динамического массива, в частности CArrayInt.
Вот что-то наподобие:
Конструктор копирования и оператор присваивания нужно самому будет придумать...Копирования не должно быть, массивы большие и их может быть много. Буду использовать третий вариант в начале поста.
вам нужен vector
S s{{1,3,4}};У вас структура с вектором так инициализируется? У меня ошибку выдаёт
У вас структура с вектором так инициализируется? У меня ошибку выдаёт
Да, начиная с С++11 это нормально. Какой у вас компилятор? gcc, clang спокойно кушают, даже не надо указывать стандарт (-std=c++11 или выше). Видимо, вам нужно задать версию стандарта.
Разница в том, что в первом случае компилятор не может определить смещение в памяти для второго члена структуры, так как не знает размер массива, а в моем случае, массив объявлен последним и компилятор может четко указать смещение для массива. Другое дело, что объявлять такую структуру надо сразу с инициализацией, иначе компилятор законно вернет ошибку.
Да, Вы правы. Тупанул.