string型编译出现error C2535,int型正常

C++语言 码拜 9年前 (2015-10-11) 2103次浏览
#include<iostream>

#include<list>

#include<string>

//#include”d_search.h”

using namespace std;

//查询函数

template <typename T>

typename list<T>::iterator seqSearch(typename list<T>::iterator first,

 typename list<T>::iterator last, const T& target)

{

// start at location first

list<T>::iterator iter = first;

// compare list elements with item until either

// we arrive at last or locate item 

while(iter != last && !(*iter == target))

iter++;

// iter either points at item or is last

return iter;

}

int main()

{

//前list表中元素的前三项倒序存储,后三项也倒序存储,输出结果应为

//Dave Glenn Joe Heather Bryce Bret

string str[]={“Joe”,”Glenn”,”Dave”,”Bret”,”Bryce”,”Heather”};

int strSize=sizeof(str)/sizeof(string);

list<string> strList(str,str+strSize);

list<string>::iterator it,it1,it2,it3;

it1=seqSearch<string>(strList.begin(),strList.end(),”Deve”);//运行此函数出错

//换成int型,编译能通过,输出结果也正确

/*int arr[]={3,5,78,32,98,36};

int asize=sizeof(arr)/sizeof(int);

list<int> strList(arr,arr+asize);

list<int>::iterator it,it1,it2,it3;

it1=seqSearch<int>(strList.begin(),strList.end(),78);//定位78的位置*/

it1++;

for(it=strList.begin();it!=it1;)

{

strList.push_front(*it);

strList.erase(it++);

}

it2=strList.end();

it2–;

it–;  //还利用上次循环it最后的值,往前移一位

for(it3=it2;it3!=it;)

{

strList.push_back(*it3);

strList.erase(it3–);

}

for(it=strList.begin();it!=strList.end();it++)

cout<<*it<<” “;

cout<<endl;

return 0;

}

用string型编译出现:c:\program files\microsoft visual studio 10.0\vc\include\xmemory(157): error C2535: “const char (*std::allocator<_Ty>::address(const char (&)[5]) const)[5]”: 已经定义或声明成员函数 的错误,而换成int型就一切正常。

解决方案:10分
代码没什么问题,msvc2015/2013编译通过
解决方案:10分

编译器还没完全写好呗。

解决方案:20分

有些应该实现的功能还没实现。具体的,去查 VS2010 的文档。

VS2013 VS2015 做的都不只是 bug fix ,对 C++ 的支持也是逐渐加强的。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明string型编译出现error C2535,int型正常
喜欢 (0)
[1034331897@qq.com]
分享 (0)