关于初始化类类型成员的问题

m0_38001989 2017-03-21 04:00:15
C++primer中246面有一段:
class Window_mgr
{
private:
std::vector<Screen>screens{Screen(24,90,' ')};
};

虽然这个类什么都不做,但是运行的时候会发出这个错误信息:
错误 1 error C2664: “std::vector<Screen,std::allocator<_Ty>>::vector(std::initializer_list<Screen>,const std::allocator<_Ty> &)”: 无法将参数 1 从“Screen”转换为“const std::allocator<_Ty> &”



但是当在vector对象中在添加一个Screen构造函数时又可以正常运行
class Window_mgr
{
private:
std::vector<Screen>screens{Screen(24,90,' '),Screen(24,90,' ')};
};
当vector对象构造函数添加到第4个时会出现没有重载函数接受4个参数的错误。
并且只要这个vector对象只要不在内类初始化,就不会出现以上错误,想请问下大神这条类内初始化的语句问题出在哪里了....

用的编译器是vs2013。

...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3楼我是你的主体 的回复:
[quote=引用 1 楼 qq_36100960 的回复:] 类内当然不能初始化,能的话要构造函数干什么呢? static const修饰的成员变量可以直接初始化
啊? C++11不是可以类内初始化么,比如说前面的例子C++primer(第5版中文版) p244: Class Screen { public: typedef std:string::size_type pos; Screen() = default; Screen(pos ht, pos wd, char c): height(ht),width(wd),contents(ht * wd,c) {} .......... ...... private: pos cursor = 0; pos height = 0, width = 0; std::string contents; }; 这个例子中就没有在构造函数中初始化类内值cursor,用的是cursor的类内初始化,并且可以正常在编译器中运行。 [/quote]学到了
xskxzr 2017-03-22
  • 打赏
  • 举报
回复
Coliru 自己测吧
m0_38001989 2017-03-22
  • 打赏
  • 举报
回复
引用 2 楼 xsklld 的回复:
可能是VS2013对C++11的支持还不够好。
我在类内初始化int的vector时,当元素大于两个时不能正常运行。 class Window_mgr { int a = 99; std::vector<int> sols{ 23,67,22 }; }; 提示错误:错误 1 error C2664: “std::vector<int,std::allocator<_Ty>>::vector(std::initializer_list<int>,const std::allocator<_Ty> &)”: 无法将参数 3 从“int”转换为“const std::allocator<_Ty> &” 错误 2 error MSB6006: “CL.exe”已退出,代码为 2。 四个元素: class Window_mgr { int a = 99; std::vector<int> sols{ 23,67,22,54 }; }; 错误 1 error C2661: “std::vector<int,std::allocator<_Ty>>::vector”: 没有重载函数接受 4 个参数 如果方便的话请帮我检测下吧,现在用的电脑装不了更高版本的编译器,如果只是编译器的原因的话,我就不纠结这个问题了。
m0_38001989 2017-03-22
  • 打赏
  • 举报
回复
引用 2 楼 xsklld 的回复:
可能是VS2013对C++11的支持还不够好。
类似的vector初始化是可以在较新版本的编译器中正常运行的么?
m0_38001989 2017-03-22
  • 打赏
  • 举报
回复
引用 1 楼 qq_36100960 的回复:
类内当然不能初始化,能的话要构造函数干什么呢? static const修饰的成员变量可以直接初始化
啊? C++11不是可以类内初始化么,比如说前面的例子C++primer(第5版中文版) p244: Class Screen { public: typedef std:string::size_type pos; Screen() = default; Screen(pos ht, pos wd, char c): height(ht),width(wd),contents(ht * wd,c) {} .......... ...... private: pos cursor = 0; pos height = 0, width = 0; std::string contents; }; 这个例子中就没有在构造函数中初始化类内值cursor,用的是cursor的类内初始化,并且可以正常在编译器中运行。
xskxzr 2017-03-22
  • 打赏
  • 举报
回复
可能是VS2013对C++11的支持还不够好。
  • 打赏
  • 举报
回复
类内当然不能初始化,能的话要构造函数干什么呢? static const修饰的成员变量可以直接初始化
内容概要:本文围绕“光伏-储能-数据中心”系统的容量优化配置展开研究,旨在通过构建数学模型并结合Matlab编程实现,对园区内光伏发电、储能设备与数据中心算力负荷之间的多能互补关系进行协同优化。研究综合考虑可再生能源出力的波动性、储能系统的充放电特性以及数据中心的动态用电需求与算力调度特性,建立以最小化综合成本、降低碳排放强度、提升能源自给率等为目标的多目标优化模型,并采用先进的智能优化算法(如粒子群、灰狼、鲸鱼等)进行求解,从而确定光伏装机容量与储能系统配置的最优方案。文中提供了完整的Matlab代码实现流程,涵盖数据预处理、模型构建、算法求解与结果可视化全过程,属于综合能源系统与信息基础设施深度融合的前沿交叉课题。; 适合人群:具备电力系统、能源工程、自动化或计算机等相关专业背景,熟悉Matlab编程与基本优化算法原理,从事新能源利用、绿色数据中心、综合能源系统规划与低碳调度等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握光伏-储能-数据中心耦合系统的建模思路与多能流协同机制;② 学习基于Matlab的多目标容量优化配置方法与智能算法应用技巧;③ 为工业园区、数字经济园区及绿色数据中心的能源系统规划、节能减排与可持续运行提供科学决策依据和技术解决方案。; 阅读建议:建议结合所提供的Matlab代码,深入理解目标函数设计、约束条件设定及算法实现细节,可通过调整负荷参数、改变气候数据、引入新的优化目标或约束条件等方式进行拓展性实验,以深化对系统特性的认知并提升实际科研与工程应用能力。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧