Я хочу объявить структуру:
struct myStruct{
myType myVar[mySize];
//...
};
Как мне это сделать, или где я помещаю это, чтобы мне разрешалось это делать, когда значение mySize
известно во время выполнения?
mySize
фактически имеет значение по умолчанию, но пользователь может предоставить другое значение через стандартный ввод. Затем этот настраиваемый размер передается функции, в которой определена структура.
Но если структура находится внутри определения функции, я получаю сообщение о том, что ему не разрешено быть переменной, и если я помещаю его вне функции (в заголовке), он жалуется, что mySize
не определен - конечно, это не проходил там никакими средствами.
Я предполагаю, что решение лежит в ООП *, но это не то, что я еще изучал.
* Если это ложное предположение, скажите мне, чтобы я мог удалить тег.
Массив AC не может иметь динамический размер в C++ как член класса. Тем не менее, C++ имеет класс, который предоставляет именно это: std::vector
.
Это дает нам:
struct myStruct {
std::vector<myType> myVar;
myStruct(std::size_t size = default_size)
: myVar(size) {}
};
Возьмите домашнее сообщение: ознакомьтесь со стандартной библиотекой C++, работая без глубоких знаний об этом, практически невозможна в C++.
Вы можете использовать вектор
#include <vector>
struct myStruct
{
public:
// this is your array
std::vector<myType> myVar;
// this is the default constructor
// this tells that the user will be passing a number
myStruct(int const &mySize)
{
myVar.resize(mySize);
}
};
Таким образом, в основном
int main()
{
myStruct example(10);
return 0;
}
Таким образом, вам не нужно беспокоиться об управлении памятью.
myStruct
- это объект.
Есть два типа памяти, стек и куча, вы должны узнать о них, если хотите попасть в указатели и управление памятью. Я расскажу вам, как это сделать с указателями, но я не рекомендую вам идти по этому пути так скоро
struct myStruct
{
public:
// this is your array
myType *myVar;
// this is the default constructor
// this tells that the user will be passing a number
myStruct(int const &mySize)
{
myVar = new myVar[mySize];
}
// this is your default destructor
~myStruct()
{
delete[] myVar;
}
};
Но myVar становится указателем, и он обрабатывается иначе, чем вектор.
Вектор является частью стандартной библиотеки C++. Если это не для домашней работы, я предлагаю вам использовать ее.