0

如果我尝试将函数声明为void some_function(vector<pair<int, int> > theVector),我会收到一个错误(可能来自 " 之后的逗号pair<int。" 关于如何将这个向量与对传递给函数的任何想法?

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>

void someFunc(int x, int y, vector<pair<int, int> > hello);

int main()
{
    int x = 0;
    int y = 5;

    vector<pair<int, int> > helloWorld;
    helloWorld.push_back(make_pair(1,2));

    someFunc(x,y,helloWorld);
}

void someFunc(int x, int y, vector<pair<int, int> > hello)
{
    cout << "I made it." << endl;
}

错误:“向量”尚未声明

4

4 回答 4

4

您未能包含<utility>, 它定义了std::pair并且您使用的是vectorand pair,而不是std::vectorand std::pair

所有标准模板库都在命名空间内std,因此您必须在 STL 中为类型添加前缀std,例如std::vector. 另一种方法是using std::vector;在包含<vector>.

于 2013-01-31T03:45:57.963 回答
4

您需要为 vector、pair、make_par 提供完整的命名空间,它们来自 std 命名空间:

void someFunc(int x, int y, std::vector<std::pair<int, int> > hello);

int main()
{
    int x = 0;
    int y = 5;

    std::vector<std::pair<int, int> > helloWorld;
    helloWorld.push_back(std::make_pair(1,2));

    someFunc(x,y,helloWorld);
    return 0;
}

void someFunc(int x, int y, std::vector<std::pair<int, int> > hello)
{
    std::cout << "I made it." << std::endl;
}

旁注:您可以通过引用将向量传递给 someFunc,这将省略不必要的复制:

 void someFunc(int x, int y, const std::vector<std::pair<int, int> >& hello);
                              ^^^                                   ^^
于 2013-01-31T03:58:32.170 回答
1

你是否包括<vector><utility>?您应该在和上使用std::命名空间。vectorpair

例如。 void some_function(std::vector< std::pair<int, int> > theVector)

编辑:当然,您通常不应该通过值传递向量,而是通过引用传递。

例如。 void some_function(std::vector< std::pair<int, int> >& theVector)

于 2013-01-31T03:46:05.727 回答
0

我检查了您的代码,您只需std#include. 而且你不需要添加#include <utility>它可以在没有它的情况下工作。
using namespace std

于 2015-04-27T11:22:00.393 回答