全局向量 C++

Posted

技术标签:

【中文标题】全局向量 C++【英文标题】:global vector C++ 【发布时间】:2009-12-11 16:28:44 【问题描述】:

C++ 是否可以将向量作为全局变量? 像这样:

class system ...;
vector<system> systems;

当我尝试编译它时,我得到一个错误。我正在使用的编译器是 gcc,我正在编译为 C++。

【问题讨论】:

你得到的错误信息是什么? 矢量可以设为全局。虽然我不建议没有充分的理由这样做。错误是什么? 请。给 。我们 。这 。错误 。留言 【参考方案1】:

是的,可以这样:

#include <vector>

class system ... ;

std::vector<system> systems;

所以vector global var是在类系统定义之后定义的。必须包含向量,并且不要忘记向量之前的 std::(或使用命名空间 std)。

编辑: 我只是想到了一些事情。还有一个函数叫做system。尝试不同的类名。

【讨论】:

如果你尝试用 gcc 编译这段代码,你会得到一个错误。请参阅我关于类名为“system”的回答。 它使用 g++ 4.4.1 为我编译(删除 ...)。 “系统”不是 C++ 中的保留字,如果您正在考虑的话。 @Neil,我在 Cygwin 下使用 g++ 3.4.4 进行测试。我知道 system 不是保留关键字,但由于某种原因 g++ 给出了错误。 但是,system 是在&lt;stdlib.h&gt;&lt;cstdlib&gt; 中声明的函数。 (我在 Harbison 和 Steele 的“C, A Reference Manual”的第 19.2 节中列出了它)。我肯定会选择另一个名字。【参考方案2】:

system() 是一个 c-stdlib 函数,因此可能是一个已经定义的名称,所以你不能重复使用它。

将其重命名为其他名称(系统?)并在下次发布完整的错误消息,请。

【讨论】:

作为标准库函数名称并不使其成为保留名称。如果他没有包含 ,他不应该在符号表中看到“系统”。这似乎是至少某些版本的 g++ 的问题。在这些情况下更改类名确实有帮助 - 请参阅我的答案。 即使这是真的,只有当你以某种方式包含 windows.h 时才会发生错误!!!! 对.. 保留对我来说是不好的措辞.. 我已经更新了。【参考方案3】:

当我在 Cygwin 下使用 g++ 3.4.4 编译您的代码时,出现以下错误:

test.cpp:8: 错误:模板参数列表中参数 1 的类型/值不匹配 对于`模板类 std::vector'

test.cpp:8: 错误:期望一个类型,得到 `system'

test.cpp:8: 错误:模板参数 2 无效

test.cpp:8: 错误:';'之前的声明类型无效令牌

问题是你的类名系统,要么改变类名,要么使用:

vector&lt;class system&gt; systems

【讨论】:

去掉标头并再次检查。 唯一包含的标头是 +1 以抵消可笑的反对票。关键字class 确实可以用来消除符号含义的歧义。对于潜在的反对者:习惯上留下评论来解释投票。 @avakar:我同意。我也 +1。【参考方案4】:

我打赌你在没有extern的头文件中声明了它

【讨论】:

我没有给你投反对票。我必须说这是一个没有错误本身的有效猜测。不知道为什么有人会因此而投反对票【参考方案5】:

你的意思是:

#include<iostream>
#include<vector>
using namespace std;
class system
  // class members
 ;

vector<system> v;

int main()

   //do something

它在我的 g++ 编译器中运行良好。我认为全局定义向量变量应该没有问题,但不建议这样做。

【讨论】:

这不会在我的 cygwin 下的 g++ 编译器中编译。问题在于类名“系统”。看我的回答。 这里的'system'没有问题。我想你可能已经包含了标题 这就是问题所在。【参考方案6】:

错误通常出现在 windows.h 中! “系统”在“windows.h”或其中包含的内容中定义。我想这是进行系统调用的功能。

【讨论】:

以上是关于全局向量 C++的主要内容,如果未能解决你的问题,请参考以下文章

全局向量在 C++ 程序结束时导致段错误

(C++) 创建可以从函数访问的动态全局数组/向量

c++ 全局变量初始化(initializer_list的向量)

如何在 C++ 的主函数中为全局声明的 2d 向量分配大小?

当vector是全局变量时,C++中vector的内存管理

如何动态分配全局 int*?