Struct,Pointers中的数组[C ++ Beginner]

时间:2011-08-06 21:35:48

标签: c++ arrays pointers struct

来自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 个答案:

答案 0 :(得分:9)

在现代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

答案 1 :(得分:0)

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

只有在声明成员内联时才能使用type name[]语法。

答案 2 :(得分:0)

必须在编译时知道结构的大小。

答案 3 :(得分:0)

我通过以下代码解决了这个问题。它可能有设计问题,所以请查看下面的代码对我有用。

#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而不是您指定的名称。请告诉我任何问题。如果我的代码中还有其他问题,请帮助我。 谢谢 !! :)