错误:不匹配&#39;运营商[]&#39; (操作数类型是&#39; std :: list <std :: pair <int,int =“”>&gt; *&#39;和&#39; std :: pair <int,int =“”>& #39)

时间:2016-07-14 20:00:21

标签: c++ stl

我正在尝试创建一个图表,其中每个节点都是一对两个int值。为此,我创建了一个类型为pii adj的列表(pair<int, int>)。现在,当我尝试push_back列表中的pii类型节点时,它会显示

error: no match for 'operator[]' (operand types are 'std::list<std::pair<int, int> >*' and 'std::pair<int, int>')|

这是我的代码。 (我还没有添加main()的边缘)。我已经包含了所有必要的标题。我已经搜索过,但无法找到类似的错误。

#define pii pair<int, int>
#define lli long long int
using namespace std;

class graph
{
    lli v;
    list<pii> *adj;
    public:
    graph(lli v);
    void addEdge(pii n, pii m);
    void bfs(pii s);
};

graph::graph(lli v)
{
    this->v = v;
    adj = new list<pii >[v];
}

void graph::addEdge(pii n, pii m)
{
    adj[n].push_back(m);        //Error Line
}

void graph::bfs(pii s)
{
    bool visited[v];
    memset(visited, false, sizeof(visited));

    list<pii> q;
    list<pii>::iterator it;
    q.push_back(s);
    while(!q.empty())
    {
        pii temp = q.front();
        q.pop_front();
        for(it = adj[temp].begin() ; it != adj[temp].end() ; it++)
        {
            if(!visited[*it])
            {
                visited[*it] = true;
                q.push_back(*it);
            }
        }
    }
}

int main()
{
    int n, m, i, j;
    pii coordinates;
    cin>>n>>m;
    char input[n][m];
    for(i = 0 ; i < n ; i++)
    {
        for(j = 0 ; j < m ; j++)
        {
            cin>>input[i];
            make_pair(i, j);
        }
    }
    graph(n*m);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

from("file:src/data/jersey?delay=5000&noop=true") .process(new Processor() { public void process(Exchange exchange) throws Exception { MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create(); multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntityBuilder.addPart("username", username); multipartEntityBuilder.addPart("password", password); String filename = (String) exchange.getIn().getHeader(Exchange.FILE_NAME); File file = exchange.getIn().getBody(File.class); multipartEntityBuilder.addPart("upload", new FileBody(file, MULTIPART_FORM_DATA, filename)); exchange.getIn().setBody(multipartEntityBuilder.build()); } }) .to("http4://localhost:8080/restwb/upload"); 的类型为adj,它是一个指针。指针实现以下std::list<std::pair<int, int>>*

operator[]

您尝试拨打以下电话:

T & operator[](T *, std::ptrdiff_t);

您需要使用T& operator(T*, std::pair<int, int>); 类型调用operator[],这是一个有符号整数。

std::ptrdiff_t

答案 1 :(得分:1)

正如其他人所说的那样,对你的问题的直接回答是你试图用[{1}}(你有pii#defined)对指针进行索引,并且因为pair<int,int>没有自动转换为整数,它不能用作索引。

从更广泛的角度来看,由于你的缩写变量和方法名称,很难看出你想要做什么。您的意图是pii是一系列列表吗?如果是这样,您只需将第一个参数更改为add adj,以便它可以用作此数组的索引。但是通过快速查看方法int,看起来bfs可能只是一个列表,在这种情况下,您可以从其声明中删除星号并在图构造函数中删除它的赋值,并完全消除索引。或者,如果您要执行的操作是将一个adj映射到另一个pii,则需要使用pii而不是std::map