C++ 错误:没有名为';向量';在命名空间中';std&x27;

C++ 错误:没有名为';向量';在命名空间中';std&x27;,c++,c++11,vector,C++,C++11,Vector,为什么会这样 错误:命名空间“std”中没有名为“vector”的类型;你是说“赫克托”吗? void askForVector(std::vector*vector) #包括 #包括 void askForVector(std::vector*vector); int main() { std::向量; 整数大小; askForVector(&vector); std::coutvector是模板,而不是类型。请指定特定的专业: void askForVector(std::vector<

为什么会这样

错误:命名空间“std”中没有名为“vector”的类型;你是说“赫克托”吗? void askForVector(std::vector*vector)

#包括
#包括
void askForVector(std::vector*vector);
int main()
{
std::向量;
整数大小;
askForVector(&vector);

std::cout
vector
是模板,而不是类型。请指定特定的专业:

void askForVector(std::vector<int> * vector);

存在多个问题:

  • vector是一个模板,不是一种类型,您需要模板参数列表,例如函数签名中的
    vector

  • 由于要将指针传递给向量,因此需要在使用下标运算符之前取消对它的引用

    std::cin >> vector[i]; // wrong
    std::cin >> (*vector)[i]; // correct
    
  • 以下措施可以奏效:

    #include <iostream>
    #include <vector>
    
    void askForVector(std::vector<int> * 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<int> * 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";
    }
    
    #包括
    #包括
    void askForVector(std::vector*vector);
    int main()
    {
    std::向量;
    整数大小;
    askForVector(&vector);
    
    std::cout
    vector
    是一个类模板,而不是一个类。另外,当您不需要重新分配原始指针时,传递它不是最好的主意-我建议您通过引用传递
    vector
    :在函数头中使用
    &
    而不是
    *
    ,并使用类似于
    std::vector
    @Lidia的参数NSWER解决了你的问题,考虑尽快标记它。当我使用模板,如你所说,我得到一个尴尬的错误:架构未定义的符号x8664:“askFovector(STD::YO:1::向量*)”,从:未找到架构x86的_64@LidiaFreitas:听起来好像您在一个源文件中定义了模板,并试图在另一个源文件中使用它。模板通常必须在头文件中定义,因为每个需要实例化它的源文件都需要该定义。请注意,奇怪的强制转换是不必要的,而且有些危险。
    (*vector)[i]
    是访问向量元素所需的全部内容。这是事实,尽管为了有效地解释问题,我倾向于过于冗长。编辑。。
    void askForVector(std::vector<int> & vector);
    
    std::vector<int> askForVector() {
        std::vector<int> vector;
        // your code here
        return vector;
    }
    
    std::cin >> vector[i]; // should be (*vector)[i]
    
    std::cin >> vector[i]; // wrong
    std::cin >> (*vector)[i]; // correct
    
    #include <iostream>
    #include <vector>
    
    void askForVector(std::vector<int> * 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<int> * 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";
    }