在程序函数中创建对象数组
creating an array of objects within a function of a program
有人可以告诉我我需要做什么才能在函数中创建对象数组(除了在主函数中)。
我将尝试通过编造某种例子来解释......
假设我有一个名为TimeScheduler的程序.cpp它实现了类Schedule.h(我将实现放在一个单独的文件计划中.cpp我们在其中定义方法)。
在声明文件中,我们声明了两个构造函数
Schedule(); //the default
和
Schedule(int, int, int);//accepts three arguments
说到重点——假设在主程序文件 TimeScheduler 中.cpp除了从类 Schedule 继承的函数之外,我们在这个程序中创建了自己的函数。 所以我们的原型列在顶部。
/*prototypes*/
void makeSomeTime();
等。。。。。
我们有
main(){
//etc etc...
}
然后我们定义这些程序函数
void makeSomeTime(){
//process
}
假设在函数makeSomeTime()中,我们想创建一个像这样的Schedule对象数组
Schedule ob[]={
summer(5,14, 49),
fall(9,25,50)
};
我必须对函数makeSomeTime()做什么才能允许我创建这个对象数组。我问的原因是目前我在使用自己的程序时遇到困难,因为它将允许我在main()中创建这个对象数组。但不是在我刚刚举一个例子的函数中。奇怪的是,它将允许我在函数中创建对象的动态数组.....喜欢
Schedule *ob = new Schedule[n+1];
ob[2]= Schedule(x,y,z);
为什么它让我在 main() 中分配给一个非动态数组,而不是让我在函数中这样做?
不正确的:
Schedule ob[]={
summer(5,14, 49),
fall(9,25,50)
};
您似乎正在尝试引入 3 个新名称:
-
ob
,这是一个Scedule
数组 -
summer
,这是一个Schedule
-
fall
,这是一个Schedule
你不能引入summer
和fall
这样的新名称。 也许这只是一个错字,你的意思是:
Schedule ob[]={
Schedule(5,14, 49),
Schedule(9,25,50)
};
。这完全没问题,并且可以存在于以下函数中:
void make_schedule()
{
Schedule ob[]={
Schedule(5,14, 49),
Schedule(9,25,50)
};
}
但是现在你还有另一个问题——你的make_schedule
函数返回void
。 您在 make_schedule
中创建的 Schedule
数组被创建,然后被丢弃。 如果要从函数返回数组,最好的办法是使用 vector
,并返回:
std::vector<Schedule> make_schedule()
{
Schedule ob[]={
Schedule(5,14, 49),
Schedule(9,25,50)
};
const size_t num_obs = sizeof(ob)/sizeof(ob[0]);
std::vector<Schedule> ret;
std::copy( &ob[0], &ob[num_obs], std::back_inserter(ret));
return ret;
}
一个更糟糕的替代方法是使用动态分配来分配数组,并返回指向第一个元素的指针。 在这种情况下,使用 new []
时,请务必注意只能使用默认构造函数。
我决定不使用向量,而是使用unordered_map。我没有意识到,当你用 c++ "命名"一个对象时,你并没有真正给它起一个名字......它只是用作一种临时参考。如果要使用名称,最好使用名称作为集合中的键值。喜欢:
字符串食品名称;
食物名称="蛋糕";
[食品名称,10.95]
食物名称="面包";
[食品名称,5.75]
我找到了有关unordered_map http://msdn.microsoft.com/en-us/library/bb981993.aspx 的帮助
- C++创建对象数组
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 使用 C++ 创建对象数组
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 在递归函数中更有效地创建对象和对象数组?C++
- 在对象中创建对象数组时的默认构造函数
- 如何使用安置新操作员创建对象数组
- 创建对象数组c++时崩溃
- 如何在C 中创建对象数组或类数组
- 创建对象数组会导致问题
- 在 NS-3 中创建对象数组时出错 (C++)
- 在程序函数中创建对象数组
- 当我尝试创建对象数组时出错
- 无法在 c++ 中创建对象数组
- 如何在C++中创建对象数组
- 创建对象数组然后有效删除它们的更好方法
- 创建对象数组时出现分段错误
- 创建对象数组c++
- 如何在没有动态内存分配的情况下创建对象数组
- 是否可以在C++中创建对象数组队列