You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用自定义构造函数创建类对象的std::vector?push_back调用报错求解

解决std::vector存储带自定义构造函数类对象的问题

你的代码存在几个关键问题导致push_back调用失败:

  • std::vector::push_back()仅接受单个参数(要添加的类对象实例),直接传入构造函数的两个参数不符合语法要求。
  • 类定义末尾缺少分号,这是C++的强制语法规则。
  • 代码中的"是HTML转义字符,实际编写时需替换为普通双引号"。

下面提供几种可行的解决方式:

方法1:构造临时对象传入push_back

直接在push_back中构造临时的sampleClass对象,将构造参数传递给临时对象:

#include <vector>
#include <string>

class sampleClass{
    private:
        std::string cID;
        int cNum;
    public:
        sampleClass(std::string inputID, int inputNum){
            cID = inputID;
            cNum = inputNum;
        }
}; // 注意此处的分号

int main(){
    std::vector<sampleClass> vSC;
    
    vSC.push_back(sampleClass("id1", 1));
    vSC.push_back(sampleClass("id2", 2));
}

方法2:使用emplace_back直接在vector内存中构造对象

emplace_back()可以直接将构造参数传递给类的构造函数,在vector的内部内存中直接创建对象,相比临时对象的方式更高效:

#include <vector>
#include <string>

class sampleClass{
    private:
        std::string cID;
        int cNum;
    public:
        sampleClass(std::string inputID, int inputNum){
            cID = inputID;
            cNum = inputNum;
        }
};

int main(){
    std::vector<sampleClass> vSC;
    
    vSC.emplace_back("id1", 1);
    vSC.emplace_back("id2", 2);
}

方法3:先创建对象再push_back

如果需要复用对象或更清晰地控制对象创建流程,可以先实例化对象,再将其添加到vector中:

#include <vector>
#include <string>

class sampleClass{
    private:
        std::string cID;
        int cNum;
    public:
        sampleClass(std::string inputID, int inputNum){
            cID = inputID;
            cNum = inputNum;
        }
};

int main(){
    std::vector<sampleClass> vSC;
    
    sampleClass obj1("id1", 1);
    vSC.push_back(obj1);
    
    sampleClass obj2("id2", 2);
    vSC.push_back(obj2);
}

额外说明:由于你的类没有定义默认构造函数,vector的resize()等需要自动创建新元素的操作会失效,但push_back和emplace_back不受影响,因为它们是显式触发对象构造的。

内容的提问来源于stack exchange,提问作者nyedoardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:46:05