我在使用自己班级的向量时遇到问题。我的意图是在每个空格键单击上创建一个新对象。我已经写了一些代码:
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]
我已经花了大约一个小时在互联网上搜索一些书籍和阅读各种主题,但没有一个是有用的。我把希望寄给你们了!
答案 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);