注册 登录
编程论坛 C++教室

构造函数初始化列表提示: 缺少类模板std::vector的参数列表;不能出现类型名

wolfcan 发布于 2022-01-01 20:32, 2386 次点击
定义一个类如下,如果构造一个对象不会报错。

程序代码:


class BCLT
{
public:
    BCLT():photo(3,std::vector<cv::Mat>(2,cv::Mat())) {};
    ~BCLT() {};
    std::vector<std::vector<cv::Mat>> photo;
private:

};



如果将上面构造函数中的初始化列表修改为下面代码,则初始化列表中提示两个红色的波浪线。第一个是std::vector,提示“缺少类模板std::vector的参数列表”,按理说我圆括号里面已经说明是cv::Mat类型。第二个是cv::Mat,提示“不能使用类型名”,加上圆括号就正常了,有什么区别吗?圆括号里面也没有写cv::Mat的类型呀。
程序代码:


class BCLT
{
public:
    BCLT():photo(3,std::vector(2,cv::Mat)) {};
    ~BCLT() {};
    std::vector<std::vector<cv::Mat>> photo;
private:

};



谢谢,求教。
2 回复
#2
rjsp2022-01-02 11:27
先说第二个问题,
cv::Mat 是一个类型,
cv::Mat() 是一个值(匿名的对象)。
比如,
int a = 123 是正确的,
int a = int() 是正确的,
但 int a = int 是错误的。

在改正了第二个问题的前提下,如果你使用C++17或更新的标准,那么就可以编译通过;
如果你使用C++14或更老的标准,那么老实地将模板参数补上。

程序代码:
#include <vector>

namespace cv
{
    class Mat {};
}

class BCLT
{
public:
    BCLT():photo(3,std::vector(2,cv::Mat())) {};
    ~BCLT() {};
    std::vector<std::vector<cv::Mat>> photo;
};

int main()
{
}
#3
wolfcan2022-01-02 20:59
回复 2楼 rjsp
谢谢版主
1