VS2013对C++新特性的支持不够,在编译CloudCompare时会报各种错误。现将遇到的问题及解决方法跟大家分享下。
    ①
    
     error C2440: “初始化”: 无法从“initializer-list”转换为“QList<QChar>”
    
   
    
     这个是VS2013对
     
      initializer-list还不支持。
      
       initializer-list指的是C++11中的一个新特性,允许构造自定义对象数组时,使用像普通数组一样的初始化方法。
      
     
    
   
    
     
      
       简单举例,比如int a[] = {1,2,3,4};这个编译器都支持;但对于Person persons[] = {new Person(), new Person()},旧的编译器已经不支持了。
      
     
    
   
    
     
      
       在编译过程中发现只有一个地方报了这个错,是在CCViewer里边。因此就顺手改了吧,
      
     
    
   
    
     
      
       
       
      
     
    
   
    
     
      ② 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(357,5): warning MSB8004: Output Directory does not end with a trailing slash.  This build instance will add the slash as it is required to allow proper evaluation of the Output Directory.
      
      1>  ccviewer.cpp
      
      1>D:\CloudCompare-master\CloudCompare-master\plugins\ccIOFilterPluginInterface.h(54): error C2440: “<function-style-cast>”: 无法从“initializer-list”转换为“QVector<FileIOFilter::Shared>”
      
      1>          无构造函数可以接受源类型,或构造函数重载决策不明确
      
      1>  ccPluginManager.cpp
      
      1>D:\CloudCompare-master\CloudCompare-master\plugins\ccIOFilterPluginInterface.h(54): error C2440: “<function-style-cast>”: 无法从“initializer-list”转换为“QVector<FileIOFilter::Shared>”
      
     
    
   
    
     
      1>          无构造函数可以接受源类型,或构造函数重载决策不明确
     
    
   
这个错误是VS2013对lambda表达式不支持导致的,错误位置在ccIOFilterPluginInterface.h中,修改方法是:
    
    
   
修改方法是:
    
    
   
    ③ 1>..\..\CloudCompare-master\qCC\pluginManager\ccPluginManager.cpp(264): error C2332: “struct”: 缺少标记名
    
    1>..\..\CloudCompare-master\qCC\pluginManager\ccPluginManager.cpp(264): error C2226: 语法错误 : 意外的“ccPluginManager::loadFromPathsAndAddToList::<unnamed-tag>”类型
    
    1>..\..\CloudCompare-master\qCC\pluginManager\ccPluginManager.cpp(267): error C2332: “struct”: 缺少标记名
    
    1>..\..\CloudCompare-master\qCC\pluginManager\ccPluginManager.cpp(267): error C2144: 语法错误:“ccPluginManager::loadFromPathsAndAddToList::<unnamed-tag>”的前面应有“)”
    
    1>..\..\CloudCompare-master\qCC\pluginManager\ccPluginManager.cpp(267): error C2660: “QVector<ccPluginInterface *>::indexOf”: 函数不接受 0 个参数
    
   
1>..\..\CloudCompare-master\qCC\pluginManager\ccPluginManager.cpp(267): error C2059: 语法错误:“)”
这个错误有一大堆,找了半天,却发现原因在于对interface这个变量的使用上,可能对于VS2013,interface是个关键字,把它当做变量出了问题。只用将interface这个变量修改为interface0,就没问题了。当然,你也可以将它改成其他名称。
    
    
   
 
