我已经看过所有教程和我的步骤是正确的,但我仍然无法让矢量工作。以下是我的主要功能。
int main(int argc, char* argv[]) {
std::vector list<test>;
list.push_back(new test());
}
我希望添加一个test
的自定义自定义类。标题在
#ifndef GIVE_ME_BRAIN_TEST_H
#define GIVE_ME_BRAIN_TEST_H
class test {
public:
test();
};
类定义在
之下#include "test.h"
test::test(){}
#endif //GIVE_ME_BRAIN_TEST_H
然而,编译器继续吐出此消息。
谷歌搜索所有表明我的代码是正确的。我做错了什么?
答案 0 :(得分:2)
首先,将std::vector list<test>
个书呆子声明为std::vector<test> list
。这就是编译器抱怨的原因。
其次,std::vector<test>
是包含实际vector
对象的test
。在您的情况下,new test()
返回指向test
对象的指针。您的向量不接受指向test
个对象的指针。
请改为尝试:
std::vector<test> list;
list.push_back(test());
否则会继续抱怨。
请注意,new
已不再使用。正如评论中所提到的,不要忘记在C ++中(例如,与Java不同),对new
的每次调用都必须通过调用delete
来匹配,以避免内存泄漏。没有自动垃圾收集。如果你忘了这一点,编译器就不会抱怨,但你的程序会使用越来越多的内存,并可能(最终)减慢你的系统速度和/或崩溃。
答案 1 :(得分:1)
你写了
std::vector list<test>;
但正确的语法是
std::vector<test> list;
此外,您无法添加指向对象矢量的指针。你需要取消引用它:
auto tmp = new test();
list.push_back(*tmp);
答案 2 :(得分:1)
首先:请添加#include <vector>
第二次:行std::vector list<test>;
需要替换为std::vector<test> list
第三: list.push_back
将参考作为参数而不是指针,因此更改如下:
test *tmp = new test();
list.push_back(*tmp);
最终的解决方案是:
#include <iostream>
#include <vector>
using namespace std;
class test {
public:
test() {
}
};
int main(int argc, char* argv[]) {
std::vector<test> list;
test *tmp = new test();
list.push_back(*tmp);
}