发生错误无法运行

时间:2015-01-29 05:01:10

标签: c++ eclipse vector

我有一个由Eclipse开发的程序。

这是一个如下代码。

class VectorClass
{
    private:
        vector<string> VectorTest;
    public:
        VectorClass()
        {
            VectorTest[0] = "TEST1";
            VectorTest[1] = "TEST2";
            VectorTest[2] = "TEST3";
        }
};

当您编写这样的代码时,我在调试时会收到以下错误。

No source available for "std::basic_string<char, std::char_traits<char>,
 std::allocator<char> >::assign() at 0x3e0009dfd6"

所以,我更改了以下代码。

class VectorClass
{
    private:
        vector<string> *VectorTest;
    public:
        VectorClass()
        {
            VectorTest = new vector<string>;
            VectorTest->at(0) = "TEST1";
            VectorTest->at(1) = "TEST2";
            VectorTest->at(2) = "TEST3";
        }
};

然后就变成了这样一个错误。

terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check

我接受了检查,但我不知道原因。

使用是否错误。

感谢阅读。

2 个答案:

答案 0 :(得分:0)

在所有情况下,向量都不像数组一样工作。数组具有固定大小,向量可以增长和缩小。因此,虽然您可以使用operator[]将元素分配给数组,但不能使用它来访问超出当前大小的向量元素。

您需要先使用push_back()将元素放入向量中,然后使用operator[]来访问/分配这些元素。 (您还可以定义具有特定大小的矢量。)

以下代码应该有效:

VectorTest.push_back(string("TEST1"));
VectorTest[0] = "Change TEST1";

这里的区别在于push_back()之后,vector有一个元素,所以你现在可以访问位置0的元素。

答案 1 :(得分:0)

顺便说一句,我试图在矢量变量中嵌套。

因此,我认为代码如下。

class VectorClass
{
    private:
        vector< vector<string> > *VectorTest;
    public:
        VectorClass()
        {       
            VectorTest = new vector< vector<string> >(20);
            VectorTest->at(0) = new vector<string>(20);

            VectorTest->at(0)->at(0) = "TEST1";
            VectorTest->at(0)->at(1) = "TEST2";
            VectorTest->at(0)->at(2) = "TEST3";
        }
};

但是,你无法在此成功编译。

为了实现这项业务应该采取任何方式吗?

感谢阅读。