C ++矢量的矢量在类中

时间:2013-06-16 07:55:01

标签: c++ class vector

我有一个类,其中存储了双精度矢量,如下所示:

class clsHalfphoneUnitJoinFeatures : public CBaseStructure
{
private:
    vector<double> m_content;
protected:
    virtual void ProcessTxtLine(string line);
public:
    vector<double> &Content();
    void Add(vector<double> &jf);
};

但是,当我想添加一个新的双精度矢量时,它将不起作用:

void clsHalfphoneUnitJoinFeatures::ProcessTxtLine(string line)
{
    line = CompactLine(line);
    if (line == "")
        return;

    int b = 0;
    int n = line.find("\t");
    string s = "";
    int idx = 0;
    vector<double>jf;
    jf.resize(16);
    int i = 0;

    for(;;)
    {
        if (n == -1)//if this is the last item in this line
        {
            s = line.substr(b,line.length()-b);
            jf[i++] = atof(s.c_str());
            break;
        }
        s = line.substr(b,n-b);
        jf[i++] = atof(s.c_str());      
        b = n+1;
        n = line.find("\t",b);
    }
    m_content.push_back(jf);
}

我得到的错误是

m_content.push_back(jf);
  

错误C2664:'void std :: vector&lt; _Ty&gt; :: push_back(_Ty&amp;&amp;)':从'std :: vector&lt; _Ty&gt;'转换参数1在'double&amp;&amp;'

有人可以告诉我哪里出错了吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

jfm_content具有相同的类型,您无法将jf作为m_content的元素推送。

尝试更改

m_content.push_back(jf);

要:

m_content = jf;

如果您想要一个双重类型的矢量矢量,则需要将m_content声明为:

std::vector<std::vector<double> > m_content;

答案 1 :(得分:0)

a)错误m_content.push_back(jf);。您正在尝试将向量推送到可以存储双精度的向量。所以编译器给出了错误。

您可以通过将jf分配给m_context

来解决此问题
m_content = jf;

b)否则,如果您的实施需要矢量矢量,请按照以下步骤进行操作

将m_content声明为双向量的向量。

vector<vector<double>> m_content;
 ...
 m_content.push_back(jf);