错误:命名空间'std'中没有名为'vector'的类型

Lid*_*tas 10 c++ vector c++11

为什么会这样?

错误:命名空间'std'中没有名为'vector'的类型; 你是说'百科'吗?void askForVector(std :: vector*vector);

#include <iostream>
#include <vector>

void askForVector(std::vector * vector);

int main()
{
    std::vector<int> vector;
    int size;
    askForVector(&vector);
    std::cout << "\nsize: " << vector.size() << std::endl;
    std::cout << vector.at(0);
}


void askForVector(std::vector * vector)
{
    int size;
    std::cout << "please insert the size of vector to order: ";
    std::cin >> size;

    vector->resize(size);

    for(int i = 0; i<size; i++){
        std::cout <<  "please insert a value for the " << i+1 << " position: " ;
        std::cin >> vector[i];
    }

    for(int j: *vector)
        std::cout << ":"<<j;
    std::cout  << ":\n";
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 12

vector是模板,而不是类型.指定特定的专业化:

void askForVector(std::vector<int> * vector);
Run Code Online (Sandbox Code Playgroud)

或使功能通用

template <typename T>
void askForVector(std::vector<T> * vector);
Run Code Online (Sandbox Code Playgroud)

使用引用而不是指针可能会更好:

void askForVector(std::vector<int> & vector);
Run Code Online (Sandbox Code Playgroud)

或按值返回向量:

std::vector<int> askForVector() {
    std::vector<int> vector;
    // your code here
    return vector;
}
Run Code Online (Sandbox Code Playgroud)

避免像这样的错误

std::cin >> vector[i]; // should be (*vector)[i]
Run Code Online (Sandbox Code Playgroud)

  • 当我按照你说的那样使用模板时,我得到一个尴尬的错误:架构x86_64的未定义符号:"askForVector(std :: __ 1 :: vector <int,std :: __ 1 :: allocator <int >>*)",引用from:_ insert in insertionsort-GrnjUF.o ld:找不到架构x86_64的符号 (2认同)
  • @LidiaFreitas:听起来你在一个源文件中定义了模板,并尝试在另一个源文件中使用它.模板通常必须在标头中定义,因为每个需要实例化它的源文件都需要定义.请参见http://stackoverflow.com/questions/495021 (2认同)