全局向量 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
是在<stdlib.h>
或<cstdlib>
中声明的函数。 (我在 Harbison 和 Steele 的“C, A Reference Manual”的第 19.2 节中列出了它)。我肯定会选择另一个名字。【参考方案2】:
system()
是一个 c-stdlib 函数,因此可能是一个已经定义的名称,所以你不能重复使用它。
将其重命名为其他名称(系统?)并在下次发布完整的错误消息,请。
【讨论】:
作为标准库函数名称并不使其成为保留名称。如果他没有包含当我在 Cygwin 下使用 g++ 3.4.4 编译您的代码时,出现以下错误:
test.cpp:8: 错误:模板参数列表中参数 1 的类型/值不匹配 对于`模板类 std::vector'
test.cpp:8: 错误:期望一个类型,得到 `system'
test.cpp:8: 错误:模板参数 2 无效
test.cpp:8: 错误:';'之前的声明类型无效令牌
问题是你的类名系统,要么改变类名,要么使用:
vector<class system> systems
【讨论】:
去掉标头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'没有问题。我想你可能已经包含了标题错误通常出现在 windows.h 中! “系统”在“windows.h”或其中包含的内容中定义。我想这是进行系统调用的功能。
【讨论】:
以上是关于全局向量 C++的主要内容,如果未能解决你的问题,请参考以下文章
c++ 全局变量初始化(initializer_list的向量)