我在创建对象并使用向量而不是数组使用它们的类函数时遇到问题......我做错了什么?
I'm having trouble creating objects and using their class functions using vectors instead of arrays...What am I doing wrong?
我是使用向量的新手...我今天才开始研究它们。 我正在尝试为我的敌人类创建一个向量,以便我可以动态创建它们,但我似乎无法弄清楚如何使用类函数......
这是类...
class Enemy
{
private:
SDL_Surface *enemy;
public:
Enemy();
~Enemy();
enum Direction { UP, DOWN, LEFT, RIGHT } direction;
SDL_Rect position;
bool alive;
int setAttributes(int x, int y, int w, int h);
void update();
bool checkCollision();
};
然后我想为游戏中的敌人创建一个矢量......
vector<Enemy> enemy;
然后我尝试像这样调用类函数...
enemy->setAttributes(0, 50, 32, 32);
enemy->update();
但是当我编译时,我收到以下错误...
~/code/cpp/sdl$ g++ -o name main.cpp game.cpp player.cpp bullet.cpp enemy.cpp level.cpp -lSDL -lSDL_image -lSDL_ttf -lSDL_mixer
level.cpp: In constructor ‘Level::Level()’:
level.cpp:14: error: base operand of ‘->’ has non-pointer type ‘std::vector<Enemy, std::allocator<Enemy> >’
level.cpp: In member function ‘void Level::update()’:
level.cpp:28: error: base operand of ‘->’ has non-pointer type ‘std::vector<Enemy, std::allocator<Enemy> >’
我在这里做错了什么?
向
量不是指针(并且不像指针(,因此没有定义operator->
。 使用 Enemy
s 的向量就像使用带有下标运算符的数组一样:
std::vector<Enemy> enemies;
enemies.push_back(Enemy());
enemies[0].update();
您可以在数组上使用operator->
的原因是数组转换为指针,因此
Enemy enemies[5];
enemies->update();
相当于
Enemy enemies[5];
(*enemies).update();
这反过来相当于
Enemy enemies[5];
enemies[0].update();
但是,仅仅因为这是可能的并不意味着这是一个好主意:如果您编写enemies[0].update()
而不是enemies->update()
,人们在理解您的代码时会遇到更少的麻烦。
如果你想像使用指向数组的指针一样遍历vector<Enemy>
,你应该这样做
for (std::vector<Enemy>::iterator it = enemies.begin(); it < enemies.end(); ++it) {
it->update();
}
如果您使用的是 C++11 并且很懒惰,则可以编写auto
而不是std::vector<Enemy>::iterator
编译器将为您找出类型。 (您可能还希望将enemies.end()
的值存储在循环之外,这样您就不会在每次迭代时都调用该函数,但这无论如何都可以优化(。
enemy->setAttributes(0, 50, 32, 32);
enemy->update();
需要
enemy[0].setAttributes(0, 50, 32, 32); // Assuming you have at least one object stored in the vector
enemy[0].update();
请注意,矢量元素不是指向对象的指针,而是指向对象本身。
相关文章:
- 如何通过派生类函数更改基类中的向量
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 在类函数中初始化外部作用域变量
- c++ 在非类函数中使用类变量
- SDL_PollEvent() 无法捕获类函数内部SDL_QUIT?
- 从其他类访问类时遇到问题
- 从类成员函数到类 C 函数指针的转换
- 使用静态成员声明类时遇到问题
- 如何在模板类函数中分配结构值?
- 有没有办法将重载的类函数绑定到函数对象?
- 启动类函数作为失去引用的线程
- C++调用使用重写函数的父类函数
- 将值传递到另一个类函数在打印时为零
- 计算对类函数的所有调用次数
- 由于签名差异,调用了错误的子类函数
- 使用宏调用类函数
- 虚拟基类函数中派生类的大小
- 模板类/函数中的交叉前向声明
- 我在创建对象并使用向量而不是数组使用它们的类函数时遇到问题......我做错了什么?
- 在组合模板和类函数重载时遇到麻烦