标题:构造函数初始化列表提示: 缺少类模板std::vector的参数列表;不能出现类型 ...
只看楼主
wolfcan
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-12-9
结帖率:87.5%
已结贴  问题点数:5 回复次数:2 
构造函数初始化列表提示: 缺少类模板std::vector的参数列表;不能出现类型名
定义一个类如下,如果构造一个对象不会报错。

程序代码:

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:

};



谢谢,求教。
搜索更多相关主题的帖子: vector std 提示 Mat 列表 
2022-01-01 20:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
先说第二个问题,
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()
{
}
2022-01-02 11:27
wolfcan
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-12-9
得分:0 
回复 2楼 rjsp
谢谢版主
2022-01-02 20:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508054-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.324920 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved