如何创建包含对象的向量?

Posted

技术标签:

【中文标题】如何创建包含对象的向量?【英文标题】:How do I create a vector that holds objects? 【发布时间】:2020-02-10 01:14:17 【问题描述】:

我正在尝试创建一个可以容纳多个现有对象的向量,但我遇到了麻烦。在 Visual Studio 中,它说“此声明没有存储类或类型说明符”。

代码如下:

#include <iostream>
#include <vector>
#include <string>

struct test 
    int id;

    test(int i) 
        id = i;
    
;

test obj1(1);
test obj2(2);
test obj3(3);

std::vector<test> egg;

egg.push_back(obj1);
egg.push_back(obj2);
egg.push_back(obj3);

int main() 

【问题讨论】:

【参考方案1】:

我认为该程序的问题在于您的所有代码都在 main 方法之外,因此编译器不知道如何处理它。

【讨论】:

【参考方案2】:

您不能在文件/命名空间范围中编写表达式语句,例如egg.push_back(obj1);,而声明/定义例如@987654322 @。 表达式语句只能在块范围中使用,即在函数体内。例如

int main() 
    egg.push_back(obj1);
    egg.push_back(obj2);
    egg.push_back(obj3);

同时避免使用全局变量并将所有变量声明/定义也放在本地范围内:

int main() 
    test obj1(1);
    test obj2(2);
    test obj3(3);

    std::vector<test> egg;

    egg.push_back(obj1);
    egg.push_back(obj2);
    egg.push_back(obj3);

另外,与问题无关,使用构造函数的成员初始化列表初始化成员,而不是分配给构造函数体:

test(int i) : id(i) 

【讨论】:

【参考方案3】:

正如 zach 所说,您的 main 方法之外还有代码。 std::vector&lt;test&gt; egg; 允许在 int main 之外使用,但像 egg.push_back(obj1); 这样的函数不允许

修改代码:

#include <iostream>
#include <vector>
#include <string>

struct test 
    int id;

    test(int i) 
        id = i;
    
;

test obj1(1);
test obj2(2);
test obj3(3);

std::vector<test> egg;

int main() 
    egg.push_back(obj1); //moved to main
    egg.push_back(obj2); //moved to main
    egg.push_back(obj3); //moved to main

【讨论】:

以上是关于如何创建包含对象的向量?的主要内容,如果未能解决你的问题,请参考以下文章

基础对象和继承对象的向量

创建包含其他对象并传递给要添加到向量的函数的对象的不同方法之间是不是存在差异

如何在向量中存储多个类的不同对象?

如何打印出包含对象的向量?

当向量在内部类中时,如何删除指向对象的向量指针

如何从包含java中对象的向量中获取元素的索引