【问题标题】:Can't pass vector as parameter c++ [closed]无法将向量作为参数c ++ [关闭]
【发布时间】:2016-03-24 11:06:24
【问题描述】:

我一直在用 C++ 尝试这个:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>

int add(vector<int>& nums) {

}

但智能感知告诉我“标识符向量未定义”。我正在尝试创建一个将向量作为参数传入的函数。我可能正在做一些非常愚蠢的事情。这是与我的主程序不同的 C++ 文件。

【问题讨论】:

  • 尝试在add之前添加using std::vector;
  • 另外,尽量不要太依赖智能感知。有时会挂起,有时不会实时更新。真正的测试是编译。编译它并查看编译器错误。
  • 另外,请尝试阅读有关namespaces 的更多信息。下次它也会有所帮助,而不仅仅是这次在某处添加std::

标签: c++ function vector


【解决方案1】:

您必须限定命名空间:std::vector

请尽可能避免使用using namespace,因为它很容易导致命名冲突(如果在标头中使用,会污染整个全局命名空间)。

【讨论】:

  • 谢谢。此外,在头文件中编写原型时,再次包含 似乎很奇怪。这是唯一的方法吗?通过做#include 然后做原型?
  • 假设你的意思是一个函数声明:是的,你必须在使用标识符std::vector之前包含&lt;vector&gt;,因为standard containers cannot be forward-declared。您不必在 .cpp 文件中再次包含它。但是,如果您不在相应的 .hpp/.cpp 文件中,我建议始终包含标题,因为包含的标题是一个实现细节并且可以更改(并且您不希望此类更改破坏您的代码)。
  • 那么你会说这是写得很好的代码吗?我有一个 add 函数的头文件(只是为了我可以学习这些东西),其中包含没有正文的单行原型。在其中我包含了 然后我将 add.h 包含到带有 add 函数主体的 add.cpp 文件中。然后在我的主 cpp 文件中,我再次包含了 add.h。我来自 C# 背景,所以看起来我包含的内容太多了,但那可能只是我自己。
  • @TiernanWatson 标头应该是完全自包含的,并包含它运行所需的一切。它需要的一切,仅此而已。如果您必须在包含标头之前先包含标头,则标头的用户(可能包括您)最终会花费调试时间与确保标头完整性所花费的时间不成比例。一旦他们弄清楚了,你就知道谁会受到指责。
  • @TiernanWatson 通常对于一个函数,您不会为头文件而烦恼。在同一个文件中实现函数的所有用途,你就完成了。如果该函数被许多其他文件使用,那么现在您就有了标题的情况。在这种情况下,您通常会拥有不止一个函数,您将拥有一整套函数和数据类型定义库。
猜你喜欢
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2020-07-31
相关资源
最近更新 更多