为什么我不能在向量中添加项目?

时间:2018-03-29 02:43:23

标签: c++ vector

我已经看过所有教程和我的步骤是正确的,但我仍然无法让矢量工作。以下是我的主要功能。

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

然而,编译器继续吐出此消息。

link to image

谷歌搜索所有表明我的代码是正确的。我做错了什么?

3 个答案:

答案 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);
}