【问题标题】:error: no type named 'vector' in namespace 'std'错误:命名空间“std”中没有名为“vector”的类型
【发布时间】:2014-12-21 04:26:23
【问题描述】:

为什么会这样?

错误:命名空间“std”中没有名为“vector”的类型;您指的是 'hecto' 吗? 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";
}

【问题讨论】:

  • vector 是类模板,而不是类。
  • 另外,在不需要重新分配原始指针时传递它不是最好的主意 - 我建议您通过引用传递 vector:在函数头中使用 @ 987654324@ insted of *,并使用 std::vector 之类的参数。
  • @Lidia:如果一个答案解决了您的问题,请考虑尽快将其标记为已接受。

标签: c++ c++11 vector


【解决方案1】:

vector 是一个模板,而不是一个类型。要么指定一个特定的专业:

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

或使函数通用

template <typename T>
void askForVector(std::vector<T> * vector);

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

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]

【讨论】:

  • 当我按照你说的那样使用模板时,我得到一个尴尬的错误:架构 x86_64 的未定义符号:“askForVector(std::__1::vector >*)”,引用自:insertionsort-GrnjUF.o ld 中的 _main:未找到架构 x86_64 的符号
  • @LidiaFreitas:听起来您在一个源文件中定义了模板并试图在另一个源文件中使用它。模板通常必须在标头中定义,因为在需要实例化它的每个源文件中都需要该定义。见stackoverflow.com/questions/495021
【解决方案2】:

有多个问题:

  1. vector 是模板,而不是类型,您需要模板参数列表,例如函数签名中的vector&lt;int&gt;

  2. 由于您传递一个指向向量的指针,您需要在之前使用下标运算符取消引用它

    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";
}

Example

【讨论】:

  • 那种奇怪的演员阵容是不必要的,而且有些危险。 (*vector)[i] 是访问向量元素所需的全部内容。
  • 确实如此,尽管我有点喜欢过于冗长以有效地解释事情。正在编辑..
猜你喜欢
  • 2013-05-27
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多