2014-10-17 48 views
2

我试图使用矢量svec来存储一些字符串值。但是,在Dev C++ 5.6.1编译时,编译器报告“操作符=不匹配”的错误。为什么会出现这个错误以及如何解决它?谢谢。如何修改矢量成员的值?

#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; 
    } 

[错误]敌不过 '运算符='(操作数的类型是 '标准::矢量>' 和 '为const char [4]')

编辑:问题是在向量SVEC [ 100];将它改为vector svec(100)后,情况会好转;

edit2:我很好奇编译器认为这个声明如下。 svec仍然被宣布为矢量?

vector<string> svec[100]; 
+2

'svec'是一组向量。你需要一个大小为100的矢量,'vector svec(100);' – juanchopanza 2014-10-17 15:03:47

+0

我知道这可能只是一个例子,但是一个提示:你可以创建一个具有相同元素的矢量,像这样重复:'vector svec(100, “ABC”);' – 2014-10-17 15:04:37

+0

是的问题在于声明。谢谢。 – 2014-10-17 15:06:07

回答

6

vector<string> svec[100];是创建与std::vector<std::string> 100个元素的阵列。这是有效的语法,尽管这是一件很奇怪的事情。

因此在当前形式下,svec[i]因此是指std::vector<std::string>。为此分配“ABC”是不可能的。这就是你得到错误的原因。

你的意思写的是vector<string> svec(100);。这称为vector构造函数中的一个,其将矢量预先设定为具有100个元素。

它只是发生,std::vector重载[]运营商给你的元素访问。 (一个非常方便的模拟纯数组。)如果您进行更改,svec[i]将引用一个字符串,您可以按照您当前的方式进行设置。

+0

快乐。相当冗长的解释,但确实解释了为什么在编译过程中出现“相当晚”的错误。 – Bathsheba 2014-10-17 15:15:18

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; 
    }