Array in Struct, Pointers [C ++ Beginner] - PullRequest
       3

Array in Struct, Pointers [C ++ Beginner]

0 голосов
/ 07 августа 2011

Исходя из Java, PHP, я пытаюсь проникнуть в C ++. Я хотел бы хранить массив в структуре. Моя проблема заключается в указании размера массива после инициализации структуры.

Вот мой код для структуры:

struct SpriteAnimation {
    // ...
    int parts;                  // total number of animation-parts
    unsigned int textures[];    // array to store all animation-parts
    // ...
};

А вот для основной функции:

SpriteAnimation bg_anim;
bg_anim.parts = 3; 
unsigned int *myarray = new unsigned int[bg_anim.parts];
bg_anim.textures = myarray;

Что мне нужно изменить, чтобы это исправить?

Ответы [ 4 ]

9 голосов
/ 07 августа 2011

В современном C ++ вы бы использовали динамический контейнер для внутреннего "массива":

struct SpriteAnimation {
  std::vector<unsigned int> textures;    // array to store all animation-parts
  size_t num_parts() const { return textures.size(); }
};

Это намного безопаснее и модульнее, чем все, что вы можете попробовать с выделенным вручную хранилищем. Использование:

SpriteAnimation x;
x.textures.push_back(12);  // add an element
x.textures.push_back(18);  // add another element

SpriteAnimation y = x;     // make a copy

std::cout << "We have " << x.num_textures() << " textures." std::endl; // report
0 голосов
/ 19 июня 2015

Я обошел проблему с помощью следующего кода. Возможно, у него проблемы с дизайном, поэтому, пожалуйста, посмотрите, работает ли мне следующий код.

#include <iostream>
using namespace std;
struct lol {
  // ...
  int parts;                  // total number of animation-parts
  unsigned int *texture;   // array to store all animation-parts
  // ...
};

int main() {
  // your code goes here
  lol bg_anim;
  bg_anim.parts = 3; 
  unsigned int *myarray = new unsigned int[bg_anim.parts];
  bg_anim.texture = myarray;
  return 0;
 }

Простите за использование lol вместо указанногоname. Скажите мне о любых проблемах. И помогите мне, если есть другие проблемы в моем коде.Спасибо !!:)

0 голосов
/ 07 августа 2011

Размер структуры должен быть известен во время компиляции.

0 голосов
/ 07 августа 2011
struct SpriteAnimation {
    // ...
    int parts;                  // total number of animation-parts
    unsigned int * textures;    // array to store all animation-parts
    // ...
};

Синтаксис type name[] можно использовать только в том случае, если вы объявляете членов встроенными.

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