调用方法时出现c ++错误

时间:2015-10-26 14:42:03

标签: c++ gcc

我有以下代码在Visual Studio 10中工作,我想在Linux上移植它 - > GCC:

<VirtualHost *:80>
  ServerName www.mydomain.com
  ServerAlias mydomain.com
  DocumentRoot /var/www/mydomain.com/current/public

    <Directory /var/www/mydomain.com/current/public>
      Options FollowSymLinks
      AllowOverride None
      Order allow,deny
      Allow from all
    </Directory>

 </VirtualHost>

picojson.h

parse( v, srcUtf8.begin(), srcUtf8.end() ); <-- ERROR

我收到此错误:

template <typename Iter> inline std::string parse(value& out, Iter& pos, const Iter& last) 
{
 ...
}

我可以得到一些帮助吗?

1 个答案:

答案 0 :(得分:2)

问题是函数parse具有类型为Iter& pos的第二个参数,它是非常量引用

template <typename Iter> inline std::string parse(value& out, Iter& pos, const Iter& last)

您不能将非const引用绑定到临时对象srcUtf8.begin()

尝试以下

auto it = srcUtf8.begin();
parse( v, it, srcUtf8.end() ); 

或者代替类型说明符auto编写迭代器的显式类型。例如,如果它是类std :: string的迭代器那么

std::string::iterator it = srcUtf8.begin();
parse( v, it, srcUtf8.end() ); 

或者如果srcUtf8是一个常量对象,那么

std::string::const_iterator it = srcUtf8.begin();
parse( v, it, srcUtf8.end() ); 

对于MS VC ++ 2010,它有许多错误或它自己的语言扩展,不符合C ++标准。