无法在C ++中动态分配具有已创建类的数组

时间:2013-05-16 12:40:29

标签: c++ class pointers

我实际上成功地用一个普通的数据类型成功地做了一个动态分配的数组,但它已经有一段时间了(比如,六章!)我无法弄清楚为什么我不能动态设置数组这里 - 我知道它给了我一个int错误,但我不能使用类类型,因为类类型不处理这样的数字。此时我很困惑。这是我的代码,包括标题:

#include <iostream>
#include "milTime.h"
#include "Time.h"

using namespace std;

int main()
{
milTime *theta;
bool amOrPm;
int milHr, milSc,milM,times;


cout<<"How many times would you like to convert?";
cin>>times;
theta = new milTime;
*theta = times;

这是我的错误:

  

错误1错误C2440:'=':无法从'int'转换为'milTime   *'c:\ users \ heather \ documents \ visual studio 2012 \ projects \ military time \ military time \ source.cpp 17 1 Military Time

任何帮助都会非常感激,因为除了那之外我完全已经完成了。我和我的聪明想法让它动态分配!

这是请求的milTime类:

#ifndef MILTIME
#define MILTIME

#include <iostream>
#include "Time.h"

class milTime : public Time
{
protected:
int milHours;
int milMins;
int milSeconds;
public:
void setTime(int h)
{
    milHours = h;
}
void setMin(int m)
{
    milMins=m;
}
void setSec(int s)
{
    milSeconds=s;
}
int getmilHours()
{return milHours;}

int getmilMins()
{return milMins;}

int getmilSeconds()
{return milSeconds;} 


bool timeConverter(int mTime, int mMins, int mSecs)
{
    bool aOrPm;
    min = mMins;
    if(mTime<12)
    {
        hour = mTime;
        aOrPm = false;
        //AM will be false.
    }
    else if (mTime>12 && mTime<=24)
    {
        hour = mTime%12+1;
        aOrPm = true;
    }
    sec = mSecs;
    return aOrPm;
}
};
#endif

5 个答案:

答案 0 :(得分:2)

已经有答案为什么你的代码不能正常工作
如果你想分配一个milTime数组,你需要这样做:

theta = new milTime[times];

这将创建timesmilTime个对象

无论如何,您应该使用std::vector而不是动态分配,这样更安全

答案 1 :(得分:1)

milTime的定义是什么?

您正尝试将int(内置整数类型)分配到您自己的类型milTime中。除非您的类型具有int的赋值运算符,否则哪个不起作用。

你的类型是否有一个带int的构造函数?在这种情况下,你会想要更像的东西:

theta = new milTime(times);

答案 2 :(得分:0)

theta是指向miltime的指针,但timesint,因此*theta = times;失败。

答案 3 :(得分:0)

这是你的问题:

*theta = times;

theta是一类milTime,times是一个int。

您可能需要在milTime中创建一个setter方法,如下所示:

theta.setTime( times )

虽然我看不到你的milTime课程,你也可以发帖吗?

答案 4 :(得分:0)

好吧,似乎在这一行:

*theta = times;

您尝试将int分配给milTime。 您可以通过执行static cast

来解决此问题
*theta = static_cast<milTime>(times);

或者是oldschool演员:

*theta = (milTime) times;

但是你可以添加一个构造函数到milTime(在miltime.h中):

milTime(int i) : someInnerDataWhichIsAnInt(i) {} 

最后一个是优选的,因为演员阵容是结构不良的标志。 要使用最后一个,请执行以下操作:

theta = new milTime(times); 

或者是因为你需要一个阵列?优先使用:

std::vector<milTimes> theta() // You need to remove prior definition of `theta`.