我有一个 C++ 向量。我希望向量能够容纳可变数量的对象。
Visual Studio 2012 给我一个错误:
Error: type name is not allowed
从这段 C++ 代码中可以看出:
#include <iostream>
#include <vector>
using namespace std;
class testObject{
private:
int someInt;
public:
testObject(int a){ someInt=a; }
void show() { cout<<someInt<<endl; }
};
int main()
{
vector<testObject> testVector;
cout << "Initial size: " << testVector.size() <<endl;
for ( int i = 0; i < 3; i++ )
testVector.push_back(testObject(3));
cout << "New size: " << testVector.size() << endl;
for ( int j = 0; j < 3; j++ )
testVector[ j ].show();
system("pause");
}
但这里有另一个代码示例,看起来相同但不起作用。
void Dealer::setNumberOfPlayers( const int tNumber )
{
for ( int i = 0; i < tNumber; i++ )
vectorOfGamers.push_back(Player); // Player is a class that I created
}
我可以创建向量来同时保存庄家、机器人和玩家的对象吗?我怎么做?据我所知,向量中的所有对象都应该是一种类型。
要回答问题的第一部分,您必须先创建一个 Player 类型的对象,然后才能使用它。当你说push_back(Player)
,这意味着“添加播放器class到向量”,而不是“将 Player 类型的对象添加到向量”(这就是你的意思)。
您可以像这样在堆栈上创建对象:
Player player;
vectorOfGamers.push_back(player); // <-- name of variable, not type
或者您甚至可以内联创建一个临时对象并推送它(当它放入向量中时它会被复制):
vectorOfGamers.push_back(Player()); // <-- parentheses create a "temporary"
为了回答第二部分,您可以创建一个基本类型的向量,这将允许您推回任何子类型的对象;但是,这不会按预期工作:
vector<Gamer> gamers;
gamers.push_back(Dealer()); // Doesn't work properly!
因为当经销商对象被放入向量中时,它会被复制作为 Gamer 对象-- 这意味着只有玩家部分被有效地“切片”对象复制。但是,您可以使用指针,因为这样只会复制指针,并且永远不会对对象进行切片:
vector<Gamer*> gamers;
gamers.push_back(new Dealer()); // <-- Allocate on heap with `new`, since we
// want the object to persist while it's
// pointed to
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)