有人可以告诉我,为了在函数中创建一个对象数组(在main函数中除外),我需要做些什么。
我会尝试通过编造某种例子来解释......
假设我有一个名为TimeScheduler.cpp的程序,它实现了Schedule.h类 (我在一个单独的文件Schedule.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()中分配一个非动态数组,但是不能让我在函数中这样做?
答案 0 :(得分:2)
这是不正确的:
Schedule ob[]={
summer(5,14, 49),
fall(9,25,50)
};
你出现试图引入3个新名字:
ob
,这是Scedule
s 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
。您在Schedule
中创建的make_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 []
时,请注意您只能使用默认构造函数。
答案 1 :(得分:0)
我决定不使用矢量,而是使用unordered_map。我没有意识到,当你用c ++命名一个对象时,你并没有给它起一个名字......它只是用作一种临时引用。如果你想使用名字,最好使用名称作为集合中的一种键值。像:
string foodname;
foodname =“cake”;
[foodname,10.95]
foodname =“bread”;
[foodname,5.75]
上找到了有关unordered_map的帮助