尝试使用std :: vector <myclass> </myclass>

时间:2011-11-23 10:18:07

标签: c++ object vector sdl

我在使用自己班级的向量时遇到问题。我的意图是在每个空格键单击上创建一个新对象。我已经写了一些代码:

classes.h

class someClass
{
public:
    short x;
    short y;
    someClass::someClass();
};

classes.cpp

someClass::someClass()
{
    x = 0;
    y = 0;
}

的main.cpp

using namepsace std;    
vector<someClass> vMyVector;
(...)
case SDLK_SPACE:
    vMyVector.push_back();
break;

我也试过把额外的行放在SDLK_SPACE:

的情况下
someClass *temp = new someClass(); 
vMyVector.push_back(temp);

但在这两种情况下,编译器返回错误,如

  

错误C3867:'std :: vector&lt; _Ty&gt; :: push_back':缺少函数调用   参数列表;使用'&amp; std :: vector&lt; _Ty&gt; :: push_back'来创建指针   成员[_Ty = someClass]

我已经花了大约一个小时在互联网上搜索一些书籍和阅读各种主题,但没有一个是有用的。我把希望寄给你们了!

5 个答案:

答案 0 :(得分:4)

在第一种情况下,您错过了push_back的参数。它应该是SomeClass的实例,而不是SomeClass的指针,这显然是第二个问题 情况下。

修改 如果您只想添加一个使用默认构造函数构造的元素,则可以执行

v.resize (v.size () + 1)

并使用

引用新对象
v.back ()

答案 1 :(得分:2)

您声明了包含someClass对象的向量,但尝试添加指针。

改为写

someClass *temp = new someClass(); 
vMyVector.push_back(*temp);

someClass temp; 
vMyVector.push_back(temp);

答案 2 :(得分:1)

鉴于你对vMyVector的定义:

vector<someClass> vMyVector;

你不应该将指针推送到它,而是完整的对象:

 someClass *temp = new someClass(); 
 vMyVector.push_back(*temp);
 delete temp;

注意*,它将取消引用指针并提供类型为someClass的对象。另外,感谢sehe关于在将对象推送到数组后需要删除指针的注释,因为您正在制作对象的副本并且指针将保持悬空状态。当然,如果你真的需要在那里删除,取决于你在函数的其余部分使用指针的方式,但在某些时候你需要删除它。

实际上,您根本不需要使用new / delete(但我从您的代码开始,以显示您的问题所在的位置)。你只需:

 someClass temp; 
 vMyVector.push_back(temp);

答案 3 :(得分:1)

你有对象的向量,然后你首先尝试push_back任何东西然后你尝试push_back指向你的对象,而不是对象本身。

答案 4 :(得分:0)

如果您有vector<T>,则在致电T时需要提供T &(或push_back())。在您的第一个代码段中,您根本没有提供任何内容。在您的第二个代码段中,您推送的是T *,而不是T

尝试这样的事情:

someClass temp;
...
vMyVector.push_back(temp);