Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法将参数1从';副总裁<;T>';至';副总裁<;T>&',还有一个VS错误_C++_Visual Studio_Templates - Fatal编程技术网

C++ 无法将参数1从';副总裁<;T>';至';副总裁<;T>&',还有一个VS错误

C++ 无法将参数1从';副总裁<;T>';至';副总裁<;T>&',还有一个VS错误,c++,visual-studio,templates,C++,Visual Studio,Templates,以下代码在gcc中没有问题。在VS 2010 express中,它无法提供 ------ Build started: Project: helium, Configuration: Debug Win32 ------ testvs.cpp ..\..\helium\src\legacy\testvs.cpp(21): error C2664: 'ulink' : cannot convert parameter 1 from 'VP<T>' to 'VP<T> &

以下代码在gcc中没有问题。在VS 2010 express中,它无法提供

------ Build started: Project: helium, Configuration: Debug Win32 ------
  testvs.cpp
..\..\helium\src\legacy\testvs.cpp(21): error C2664: 'ulink' : cannot convert parameter 1 from 'VP<T>' to 'VP<T> &'
          with
          [
              T=F
          ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
----构建已启动:项目:氦,配置:调试Win32------
testvs.cpp
..\..\Hemium\src\legacy\testvs.cpp(21):错误C2664:'ulink':无法将参数1从'VP'转换为'VP&'
具有
[
T=F
]
======生成:0成功,1失败,0最新,0跳过==========
对于任何VisualStudio版本都是一样的,或者这是一个仅限于VS2010的问题? 如果删除第二个运算符()定义,则问题将消失

template<typename T> struct S{
    void operator()(T&){}
    void operator()(){}
};



  template <typename T,typename G=typename T::GP,void (S<T>::*f)(T&) =&S<T>::operator() > struct VP{
 void fa(){}
 };


template<typename T> void ulink( VP<T >& v){}



  struct F{
    typedef int GP;
  };

   void f(){

     VP<F> vps;
     ulink(vps);
   }
模板结构{
void运算符()(T&){}
void运算符()({}
};
模板结构VP{
void fa(){}
};
模板void ulink(VP&v){}
结构F{
typedef-int-GP;
};
void f(){
副总裁;
乌林克(vps);
}

感谢赛斯·卡内基确认这是另一个VS未解决的错误

可能的解决办法

1) 包含在另一个结构中

template<typename L> struct Con{
     L& l;
     Con(L& pl):l(pl){}
};

template<typename T> void ulink(const Con<VP<T > >& v){
v.l.fa();
}
模板结构Con{
L&L;
Con(L&pl):L(pl){}
};
模板无效ulink(const Con&v){
v、 l.fa();
}
2) 保持模板更通用

template<typename T> void gulink(T& v){
v.fa();
}
模板无效gulink(T&v){
v、 fa();
}

<代码> >赛斯卡内基,你在哪里测试的?我知道它没有违反C++的规则,也要确认,谢谢,我只是想知道,我应该更新VS 2012还是问题仍然存在?不,它也在VS 2012中被破解了。@塞斯卡内基:——它不破坏C++的任何规则,但它会破坏VS的骨头;