为什么这不能工作时,分割成2行
Why does this not work when split onto 2 lines?
这一行:
std::auto_ptr<Ogre::Root> lRoot (new Ogre::Root(lConfigFileName, lPluginsFileName, lLogFileName));
工作好。但是,当我这样做时,它不会:
std::auto_ptr<Ogre::Root> lRoot;
lRoot (new Ogre::Root(lConfigFileName, lPluginsFileName, lLogFileName));
报告:error: no match for call to ‘(std::auto_ptr<Ogre::Root>) (Ogre::Root*)’
就我有限的理解而言,它们不应该做同样的事情吗?还是我错过了什么重要的东西?
这两个片段之间没有什么关系。
第一个声明并初始化变量lRoot
,没有什么可看的。
第二个代码片段在第一行声明并默认初始化lRoot
,但随后它继续使用Ogre::root*
类型的参数在lRoot
上调用operator()
。由于std::auto_ptr
没有定义operator()
,编译器产生给定的错误
第一条语句是变量lRoot
的初始化声明(使用括号内初始化器的语法)。
第二个是声明默认初始化的变量lRoot
,然后在该变量上调用operator()
。(注意std::auto_ptr
没有定义这样的操作符)。
要将其分成两行(仍然作为一条语句),只需在允许空白的地方插入换行符:
std::auto_ptr<Ogre::Root> lRoot(
new Ogre::Root(lConfigFileName, lPluginsFileName, lLogFileName));
要将其实际拆分为声明和赋值(注意,拆分时不能是初始化),您可以这样做:
std::auto_ptr<Ogre::Root> lRoot;
lRoot.reset(new Ogre::Root(lConfigFileName, lPluginsFileName, lLogFileName));
它们不是一回事!
你不只是把语句分成两行。这两个是两个不同的语句。
你可以像这样把第一个语句分成两行:
std::auto_ptr<Ogre::Root> lRoot
(new Ogre::Root(lConfigFileName, lPluginsFileName, lLogFileName));
它可以很好地编译,因为多个空格被忽略了
相关文章:
- 从命令行c++发送文本文件名
- 使用新行和不使用新行读取文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 预处理器:插入结构名称中的前一个行号
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 使用一个考虑到std::map中键值的滚动或换行的键
- 如何在C++中从字符串中分割字符
- MSVC多行宏编译器错误
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- C++MySQL C api用户输入行
- 如何将 txt 文件中的行分隔为组件C++
- 无法通过空白将文本文件行分隔为矢量
- 打印矩阵后分割错误,但在打印额外行后修复(ostream <<操作器)
- 使用C 中的Linux命令行进行分割故障
- 2D 矢量中的擦除行 - 分割错误
- c++中使用换行符分割字符串
- 从文件逐行加载2D矢量时出现分割错误
- 每次我在不同的行上得到这段代码的分割错误.c++
- 如果字符串包含多个 ,如何在每25个换行符( )上分割字符串
- 为什么这不能工作时,分割成2行