我试图使用矢量svec来存储一些字符串值。但是当在Dev C ++ 5.6.1中进行编译时,编译器报告错误为"对于operator ="不匹配。为什么会出现此错误以及如何解决?感谢。
#include<vector>
#include<iostream>
#include<string>
using namespace std;
int main() {
vector<string> svec[100];
for (int i = 0; i < 100; ++i) {
svec[i] = "ABC";
}
return 0;
}
[错误]不匹配&#39;运营商=&#39; (操作数类型是&#39; std :: vector&gt;&#39;和&#39; const char [4]&#39;)
编辑:问题出在矢量svec [100];将其更改为vector svec(100)后,事情进展顺利;
edit2:我很好奇编译器对以下声明的看法。 svec仍被宣布为矢量吗?
vector<string> svec[100];
答案 0 :(得分:7)
vector<string> svec[100];
正在创建一个包含100个std::vector<std::string>
元素的数组。这是有效的语法,虽然这是一件很奇怪的事情。
因此,svec[i]
以当前形式引用std::vector<std::string>
。分配&#34; ABC&#34;这是不可能的。这就是你收到错误的原因。
您的意思是vector<string> svec(100);
。这是调用其中一个vector
构造函数,它将向量预先调整为100个元素。
恰好std::vector
重载[]
运算符才能为您提供元素访问权限。 (对于纯数组来说是一个相当方便的模拟。)如果进行更改,svec[i]
将引用一个字符串,您可以按照当前的方式设置该字符串。
答案 1 :(得分:2)
更改此声明
vector<string> svec[100];
到
vector<string> svec( 100 );
这不是100个向量的数组,而是应该定义100个元素的向量。:)
或者你可以写简单
vector<string> svec;
// svec.reserve( 100 );
for (int i = 0; i < 100; ++i) {
svec.push_back( "ABC" );
}
最简单的方法是以下
int main() {
vector<string> svec( 100, "ABC" );
return 0;
}