C++ 无法创建用户定义类的向量

Posted

技术标签:

【中文标题】C++ 无法创建用户定义类的向量【英文标题】:C++ can't create vector of user defined class 【发布时间】:2013-04-28 04:08:10 【问题描述】:

我正在尝试创建一个我刚刚设置的类的向量,但我不断收到错误。谁能给我一些建议?这是我的相关代码:

class process
    public:
        enum state New,Ready,Running,Waiting,IO,Terminated;
        double CPUburst[MAXCPUBURSTS];
        double IOburst[MAXCPUBURSTS-1];
        int nCPUbursts; // The number of CPU bursts this process actually uses
        int priority, type; // Not always used
        int currentBurst; // Indicates which of the series of bursts is currently being handled
;

vector<process> processTable;

我得到的错误是:

"template argument for 'template<class _Alloc> class std::allocator' uses local type 'main(int, char**)::process*'"

【问题讨论】:

您是否不小心在 main 方法中定义了类? @Antimony 我不知道这有什么关系。在我的 main() 方法中定义类和向量都没有问题。 ideone.com/5s5ZOe 工作正常,所以我相信锑是正确的。 我确实在 main 方法中定义了它。似乎解决了我的问题。谢谢! 【参考方案1】:

我想你已经在main 中定义了class process

来自标准(旧)

本地类型、无链接类型、未命名类型或由这些类型中的任何一种复合而成的类型不得用作模板类型参数的模板参数。

但是,这在 c++11 及更高版本中发生了变化。

因此,在全局范围内定义类或使用支持此功能的编译器(或启用)。在 g++ 中,您可以使用 -std=c++0x-std=c++11 启用此功能,具体取决于版本。

【讨论】:

这不是 current 标准所说的。这条规则在 C++03 的 14.3.1 节中找到,如今已不复存在。【参考方案2】:

Antimony 已从您的代码中解码出您不愿提及的相关细节。

解决方法是在您的编译器中启用 C++11 支持(通常为 -std=c++11-std=gnu++11)。 C++03 不允许使用本地类作为模板参数。 C++11 可以。

【讨论】:

+1 老实说,我什至从不知道这是以前受到限制的。我知道本地 functors 是不允许的,但我从来不知道一般的本地类。希望我也可以向锑投赞成票。谢谢大家。 @WhozCraig:被允许使用本地函子,但由于此限制,您无法使用它们。 我从来不知道他们!我想这是有原因的,因为本地仿函数可能正是我的用例。

以上是关于C++ 无法创建用户定义类的向量的主要内容,如果未能解决你的问题,请参考以下文章

C++ 析构函数:无法访问类中声明的私有成员

C++从类的向量指针访问类的成员

如何在 C++ 中向向量中添加新对象

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

派生类的 C++ 查找表

在 C++ 中将(预定义的)原子值添加到向量