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

基于std::vector自定义vector类时构造函数报错的问题咨询

构造函数中初始化std::vector成员的错误原因及修复方法

错误代码

#include<vector>

template<typename T>
class vec {
public:
    vec(unsigned int size){vec_(size);}
private:
    std::vector<T> vec_;            
};

int main(int argc, char* argv[])
{
    vec<int> v1(3);
    return 0;
}

报错信息

error: no match for call to ‘(std::vector<int, std::allocator>) (unsigned int&)’
| vec(unsigned int size){vec_(size);}

错误原因

你在构造函数体中写vec_(size)的操作是错误的:

  • 类成员vec_会在构造函数体执行之前完成默认初始化,也就是创建了一个空的std::vector对象。
  • 之后你在函数体里写vec_(size),编译器会认为你试图调用这个vector对象的函数调用运算符operator(),但std::vector根本没有提供这个重载运算符,因此编译器找不到匹配的调用,直接报错。

修复方案

有两种合法的方式实现你的需求:

1. 使用成员初始化列表(推荐,更高效)

直接在构造函数初始化阶段调用std::vector的带大小参数的构造函数来初始化vec_,避免先默认初始化再修改的开销:

#include<vector>

template<typename T>
class vec {
public:
    vec(unsigned int size) : vec_(size) {}
private:
    std::vector<T> vec_;            
};

int main(int argc, char* argv[])
{
    vec<int> v1(3);
    return 0;
}

2. 在构造函数体中调用resize方法

如果需要在构造函数体里执行其他逻辑后再调整vector大小,可以调用std::vector的resize成员函数:

#include<vector>

template<typename T>
class vec {
public:
    vec(unsigned int size) {
        vec_.resize(size);
    }
private:
    std::vector<T> vec_;            
};

int main(int argc, char* argv[])
{
    vec<int> v1(3);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:16:10