| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1677 人关注过本帖
标题:大括号调用有参构造函数问题,求解。
取消只看楼主 加入收藏
wolfcan
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-12-9
结帖率:87.5%
收藏
已结贴  问题点数:5 回复次数:3 
大括号调用有参构造函数问题,求解。
最近看一个微软的一个研究团队工程代码,我看到一段代码感觉有问题。
项目中定义了类 pipeline,其中只定义了有参构造函数pipelie
Pipeline(const CameraParameters _camera_parameters,
                 const GlobalConfiguration _configuration);

但为什么创建类对象的时候使用大括号包含参数呢?
Pipeline pk{ camera->get_parameters(), configuration };

既然是有参构造,不应该是用小括号构造吗?
Pipeline pk( camera->get_parameters(), configuration );

我利用代码测试,如果用大括号包含参数会提示找不到对应的构造函数。但人家论文给出了效果,开源了代码,似乎不应该有错。请大牛指点一下。难道是以前的c++标准可以这样做?谢谢
搜索更多相关主题的帖子: 构造 括号 调用 代码 构造函数 
2021-12-22 23:09
wolfcan
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-12-9
收藏
得分:0 
回复 2楼 rjsp
您好,那您的意思是人家代码是正确的,我的编译器比较老吗?
我用的是visual studio 2019,编译器应该是其自带的,我查看了有个MSVC 14.2的。
我刚才网页上点击运行您写的代码,也有如下提示和错误
程序代码:
6:20: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
     int value{ 123 };
                    ^
6:14: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
     int value{ 123 };
              ^
6:20: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
     int value{ 123 };
                    ^

 In function ‘int main()’:
11:11: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
     foo a {};
           ^
11:12: error: in C++98 ‘a’ must be initialized by constructor, not by ‘{...}’
     foo a {};
            ^
12:11: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
     foo b { 1, 2 };
           ^
12:18: error: in C++98 ‘b’ must be initialized by constructor, not by ‘{...}’
     foo b { 1, 2 };
                  ^
13:14: error: in C++98 ‘c’ must be initialized by constructor, not by ‘{...}’
     foo c = {};
              ^
14:20: error: in C++98 ‘d’ must be initialized by constructor, not by ‘{...}’
     foo d = { 1, 2 };
2021-12-23 09:16
wolfcan
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-12-9
收藏
得分:0 
回复 4楼 rjsp
好的,非常感谢。刚才调整后确实可以。
经比较,我自己创建的vs项目就有那个debug properties这个选项,可以调节编译器的版本。
而直接下载的别人的项目一般没有vs项目,就是包含一些头文件或者源文件,也就没有这个debug properties这个选项(人家的项目很多是在linux下跑的,可能属于cmake工程文件)。
所以请问:如果想编写在linux下运行的代码,但我先在windows下VS中编写行不行呢?移植到linux一般要注意什么呢?也得弄cmake工程才行吗?谢谢
2021-12-23 12:11
wolfcan
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-12-9
收藏
得分:0 
回复 6楼 rjsp
谢谢版主,非常感谢普及知识。
2021-12-23 13:29
快速回复:大括号调用有参构造函数问题,求解。
数据加载中...
 
   



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

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