2011-12-09 95 views
0

我的代码有这部分被扔我一个错误字符串操作追加一个字符串本身

for(int i=0;i<100;i++) 
{ 
s=s+","; 

cout <<"string length is now "<<s.length<<endl; 
} 

我只是一遍又一遍100倍追加相同的字符串本身。 错误是:

第23行:错误:取地址的绑定函数std :: basic_string,std :: allocator> :: length()const。

有人可以告诉我我在做什么错吗?

回答

2

应该s.length(),不s.length

cout <<"string length is now "<< s.length() <<endl; 

注意std::string::length()是一个函数,而不是一个变量。

我更喜欢.size(),因为它与所有其他容器一致。其他容器没有.length()成员函数;只有std::string具有此功能,以及返回相同值的.size()

因此,如果std::string.size(),那么为什么会例外并使用.length()?为什么不一直使用.size()?我想你建议使用.size()代替.length()

cout <<"string length is now "<< s.size() <<endl; 
+0

哦...我只是错过了错误。谢谢。 – Vijay

+0

“为什么不一直使用.size()”因为std :: string实际上不是一个容器。这是一个只有正面特征(但它是重要的)的大杂烩类,它是标准的。干杯, –

+0

@ AlfP.Steinbach:是什么使它成为一个非容器?容器的*定义是什么? – Nawaz

-1

有没有这样的事情公开可以打电话给string::length。试试这个:

s.size() 

OR

s.length() 
+0

有'std :: length()'。 – Nawaz

+0

和'std :: string :: length()',它是'std :: string :: size()'的别名。请参阅http://www.cplusplus.com/reference/string/string/length/。 – DRH

+0

好吧,我猜测OP正在尝试C#样式属性'length',这在C++中是不可用的。但'length()'当然可用。 – Donotalo

1

length功能,不是一个成员变量。您需要:

cout << "string length is now " << s.length() << endl; 

(“拍摄的......地址”),是因为s.lengthlength功能的s类型的地址,而要通话说功能和使用错误返回值。