gpt4 book ai didi

c++ - 取消引用字符串迭代器不会编译

转载 作者:搜寻专家 更新时间:2023-10-31 00:38:17 26 4
gpt4 key购买 nike

我遇到一个问题,示例代码将在代码块环境中编译和运行,但不会在 visual studio 2012 中编译

list<string> names;
names.push_back("Mary");
names.push_back("Zach");
names.push_back("Elizabeth");
list<string>::iterator iter = names.begin();
while (iter != names.end()) {
cout << *iter << endl; // This dereference causes compile error C2679
++iter;
}

导致以下编译错误

1>chapter_a0602.cpp(20): error C2679: binary '<<' : no operator found which takes a
right-hand operand of type 'std::basic_string<_Elem,_Traits,_Alloc>' (or there is no
acceptable conversion)
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]

当我将字符串列表更改为整数列表时,代码会在 VS2012 中编译和运行。

当我还更改对以下内容的取消引用时,它会编译

cout << *the_iter->c_str() << endl;

但是我在代码的后面还有另外两个取消引用问题

cout << "first item: " << names.front() << endl;
cout << "last item: " << names.back() << endl;

我真的不明白为什么这些错误是编译器相关的。

抱歉格式问题,但我无法让它接受代码。

最佳答案

添加以下包含指令:

#include <string>

因为这就是 operator<<(std::ostream&, std::string&) 已定义。

备注VS2012 supports the range-based for statement ,这会将输出循环转换为:

for (auto const& name: names) std::cout << name << std::endl;

关于c++ - 取消引用字符串迭代器不会编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18351831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com