0

以下代码用于测试将向量的引用传递给函数。但是,它会有一些未知的故障。我从 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向量中的对象可以有效的避免这个bug。

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

4

0 回答 0