【发布时间】:2013-09-06 02:42:47
【问题描述】:
我是 C++ 初学者(之前没有编程经验)。我正在编写一个基于文本的游戏,并且我有一个核心模块来开发游戏的“人口”。到目前为止,我已经确定了人口增长率(基于预定义的出生率和死亡率),我现在要做的是为每个公民创建一个独特的对象。
我创建了 Citizen 类,并使用向量来生成初始的公民群体:
vector<Citizen> myCitizens (100);
有一个函数可以为这 100 个公民中的每一个设置几个初始值。没有问题。
程序每一“年”都会计算该年的出生和死亡人数。我想根据那一年的出生人数将新对象添加到 myCitizens 向量中。
我被这个功能卡住了:
声明:
int new_citizens(int newBirths);
定义:
int new_citizens(int newBirths)
{
myCitizens.push_back(newBirths);
}
编译器构建消息:
error: no matching function for call to 'std::vector<Citizen>::push_back(int&)'
note: candidate is:
note: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Citizen; _Alloc = std::allocator<Citizen>; std::vector<_Tp, _Alloc>::value_type = Citizen]
我已经搜索了这个问题,查看了文档,搞砸了更改类型,但无济于事。我已经编译了 push_back 确实有效的示例。在通过向量创建 class 对象时,我认为我错过了一个基本的难题。
我当时的假设是我声明类型信息错误或没有正确地将信息传递给向量。我会继续努力。任何指向正确方向的指针都将不胜感激!
谢谢,
优化
【问题讨论】:
-
您正在将 int 类型添加到公民向量中,如果公民有一个接受 int 的构造函数,请使用 emplace。
-
您是否尝试将
int添加到您的向量中?还是您打算将向量扩展 N 个条目? -
@WhozCraig,仔细阅读问题后,我认为是后者。
-
@chris 我同意这个评价。对此也有一个有趣的看法。我从来没有想过有人会认为这是扩展的方法,然而,我现在完全明白了这条路是如何走的。
-
@WhozCraig 是的,我的目的是将向量(人口)扩展 N 个(新生儿)。