通过引用传递Vector并获取错误

时间:2012-08-08 08:34:41

标签: c++ vector reference

以下代码用于测试,将向量的引用传递给函数。但是,它会有一些未知的错误。我从gdb收到错误消息如下:

http://i.stack.imgur.com/8wkCu.jpg

来源是:

#include<iostream>
#include<vector>
using namespace std;
class ROLE
{
    public:
        ROLE(int);
        int HP;
};
ROLE::ROLE (int input)
{
    HP = input;
}

void checkVector(vector<ROLE>&input);
int main()
{
vector<ROLE> R;
    ROLE K(102);
    R.push_back(K);
    K.HP = 111;
    R.push_back(K);
    checkVector(R);

    return 1;
}
void checkVector(vector <ROLE> & input)
{
    cout<<"size of vector "<<input.size()<<endl;
    for(int i =0; i<input.size();i++)
    {
        cout<< input[i].HP<<endl;
    }
}

我找不到错误的原因。任何想法都表示赞赏!

我意识到错误可能来自push_back,因为如果我修改代码如下,我也会收到错误。对于发生的事情有什么想法吗?

#include<iostream>
#include<vector>
using namespace std;
class ROLE
{
    public:
        ROLE(int);
        int HP;
};
ROLE::ROLE (int input)
{
    HP = input;
}
int main()
{
    vector<ROLE> R;
    ROLE K(0);
    K.HP=1;
    R.push_back(K);
    K.HP = 113;
    R.push_back(K);
    K.HP = 111;
    R.push_back(K);


    return 0;
} 

可能的答案:

我得到一种可以避免错误的方法。 以下是无错误来源。

#include<iostream>   
#include<vector>
using namespace std;
class ROLE
{
    public:
        ROLE(int);
        void constructAry(int inputHP);
        int HP;
};  
ROLE::ROLE (int input)
{
    HP = input;
}
void ROLE::constructAry(int inputHP)
{
    HP = inputHP;
}
void checkVector(vector<ROLE>&input);
int main()
{
    vector<int> test;
    vector<ROLE> R;
    ROLE K(0);
    K.constructAry(1);
    R.push_back(K);
    K.constructAry(2);
    R.push_back(K);
    K.constructAry(3);
    R.push_back(K);
    K.constructAry(4);
    R.push_back(K);
    checkVector(R);
    return 1;
}

void checkVector(vector <ROLE> & input)
{
    cout<<"size of vector "<<input.size()<<endl;
    for(int i =0; i<input.size();i++)
    {
        cout<< input[i].HP<<endl;
    }
}

因此,似乎使用类似构造函数的函数来修改同一对象的值,并且向量中的push_back对象可以有效地避免该错误。

原因对我来说是模棱两可的。也许是记忆地址的问题。

0 个答案:

没有答案