来自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;
我需要更改以解决此问题?
答案 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
而不是您指定的名称。请告诉我任何问题。如果我的代码中还有其他问题,请帮助我。
谢谢 !! :)