在c ++ Primer中使用结构和向量的错误C2661

时间:2018-07-15 01:21:54

标签: c++ vector struct

所以我正在使用C ++ Primer,并且试图修改本书的示例之一,以使用一个结构体和一个使用所述结构体的向量来存储,然后调用所述向量的元素进行打印。

为此,我使用emplace_back()并将其传递给两个整数参数以满足结构中的两个整数声明,然后将该结构放入向量中(我相信)。

但是,在尝试调试程序时,我不断收到“错误C2661:'matrix :: matrix':没有重载的函数需要2个参数”。我不太确定发生了什么,而且我似乎也无法理解对遇到相同问题的人的其他解释。该程序运行良好,因为它写在书上(它可以编译并且不会死),但是我试图将我在Accelerated C ++中学到的东西整合到Primer中。

帮助初学者吗?这就是我所拥有的:

#include <iostream>
#include <vector>

struct matrix  //create struct
{
    int value;
    int count;
};

void printRepeats(std::vector<matrix>& e, std::vector<matrix>::size_type& r)
{
    std::cout << e[r].value << e[r].count; // print elements of struct
}

int main()
{
    std::vector<matrix> repeats;
    int currVal = 0;
    int val = 0;
    if (std::cin >> currVal)
    {
        int cnt = 0; 
        while (std::cin >> val)
        {
            if (val == currVal) 
            {
                ++cnt;          
            }
            else    
            {
                repeats.emplace_back(currVal, cnt);
                currVal = val;  
                cnt = 0;        
            }
        } 
    }
    for (std::vector<matrix>::size_type r(0); r != repeats.size(); r++)
    {
        printRepeats(repeats, r);
    }
    std::cin.get();
    std::cin.get();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

@Borgleader当然是正确的。但是博格总是如此。

因此,要对其进行编译,只需更改以下内容即可:

struct matrix
{
    int value;
    int count;
};

对此:

struct matrix
{
    matrix (int value, int count) : value (value), count (count) {}  // constructor
    int value;
    int count;
};

然后离开。

在Wandbox上查看:https://wandbox.org/permlink/zzRRzdQjjG1vm4tM