Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;在单独的函数中定义向量_C++ - Fatal编程技术网

C++ c++;在单独的函数中定义向量

C++ c++;在单独的函数中定义向量,c++,C++,我想在一个函数中定义一个包含静态内容的向量,这个函数可能被多个程序使用。然而,我面临着一些问题 main.cpp如下所示: #include <iostream> #include <boost/assign/std/vector.hpp> using namespace std; using namespace boost::assign; int main (int argc, char* argv[]) { vector< int > v;

我想在一个函数中定义一个包含静态内容的向量,这个函数可能被多个程序使用。然而,我面临着一些问题

main.cpp如下所示:

#include <iostream>
#include <boost/assign/std/vector.hpp>

using namespace std;
using namespace boost::assign;

int main (int argc, char* argv[]) {

  vector< int > v;
  v +=   3,5,1;

  for (int i=0; i<v.size(); i++) {
   cout << "v: " << i << " " << v[i] << endl;
  }
}
但是,如果我尝试将向量定义放在一个单独的文件中,它将不起作用

main.cpp

#include <iostream>
#include "vector_test.hpp"

using namespace std;

int main (int argc, char* argv[]) {

  vector< int > v;

  for (int i=0; i<v.size(); i++) {
    cout << "v: " << i << " " << v[i] << endl;
  }
}
qt创建者还告诉我:

expected a declaration

如何修复此问题?

一种方法是让函数返回对静态实例的引用:

const std::vector<int>& get_magic_vector()
{
  static std::vector<int> v{3, 5, 1};
  return v;
}
const std::vector&get\u magic\u vector()
{
静态std::向量v{3,5,1};
返回v;
}
然后

for(自动i:get\u magic\u vector())

std::cout在其他文件中,必须说明变量存在,但在另一个文件中定义。也就是说,在otherFile.cpp中,在文件范围中放置以下行:

 extern std::vector<int> v;
extern std::vector v;

向量是什么类型的?知道这一点很重要。请发布不起作用的代码,否则我们帮不了你。另外,您是否正在使用Boost.assign
v+=3,5,1
将需要该库或类似的库。@juanchopanza:您对type的确切含义是什么?我需要存储整数,所以我用
vector
将其定义为问题中的整数。这有用吗?您使用的
向量是什么?你从哪个图书馆得到的,文档在哪里。你需要知道,为了建议初始化它的方法等等。@interjay,是的,很抱歉我使用了
boost::assign
。谢谢,这是有效的,尽管我不得不将它重写一点:
const std::vector&get_magic_vector(){static std::vector v;v+=3,5,1;return v;}
@red tiger好的,这一定意味着你没有C++11的支持。
expected a declaration
const std::vector<int>& get_magic_vector()
{
  static std::vector<int> v{3, 5, 1};
  return v;
}
for (auto i : get_magic_vector())
  std::cout << i << " ";
 extern std::vector<int> v;