【问题标题】:Getting an error about the default constructor and I don't know why - C++收到有关默认构造函数的错误,我不知道为什么 - C++
【发布时间】:2011-08-31 12:43:44
【问题描述】:

我只是为了练习而编写了一个简单的 C++ 程序,但我一直收到同样的错误,这就是说我没有默认构造函数。但是,我已经尝试显式声明一个默认构造函数,但我仍然得到完全相同的错误。我不明白问题是什么。这是我从 GNU C++ 编译器得到的错误:

sorting.cpp:在函数“int main()”中:
sort.cpp:5:错误:没有匹配的函数调用‘Time::Time()’
sort.h:12:注意:候选人是:Time::Time(int, int)
sort.h:7: 注意:Time::Time(const Time&)

这里是代码: sorting.cpp

#include "sorting.h"

int main()
{
    Time* courses = new Time[3];
    courses[1].setTime(9,30);
    courses[2].setTime(10,30);
    courses[3].setTime(12,0);
    Course this_year(3, courses);
    this_year.printTimes();
    delete [] courses;

    return 0;
}

sorting.h
#include iostream>

using namespace std;

class Time
{
private:
        int                 hours;
        int                 minutes;
public:
                    Time();
        Time(int h = 0, int m = 0) ;
        void                setTime(int h, int m) ;
        void                printTime();
};

class Course
{
private:
        int                 period_count;
        Time*               periods;
public:
        Course(int count, ...);
        void                printTimes();
};

Time::()
{
};

Time::Time(int h, int m)
{
    hours = h;
    minutes = m;
};

void Time::setTime(int h, int m)
{
    hours = h;
    minutes = m;
    return;
};

void Time::printTime()
{
    cout << hours << ":" << minutes;
    return;
}

Course::Course(int count, Time* the_times)
{
    period_count = count;
    for (int i = 0; i < count; ++i)
    {
            periods[i] = the_times[i];
    }
}

void Course::printTimes()
{
    for(int i = 0; i < count; ++i)
    {
            periods[i].printTime();
    }
    return;
}

【问题讨论】:

  • -1:操作似乎已经编辑了这个并通过添加默认构造函数来解决问题。
  • 您还有另一个问题,即数组从零开始。索引 1、2 和 3 实际上应该是 0、1 和 2。
  • 您发布的代码不会产生该错误消息。您能否将示例的复杂性降低到单个文件、单个类,但仍然显示错误?
  • 在不标记更改的情况下修复代码是不礼貌的,因为它会使没有看到原始问题的每个人感到困惑。
  • @Evan,它会根据您所做的更改给出不同的信息。现在它给出了一个关于歧义的错误,这很容易弄清楚,如果你的问题有真正的错误信息,你现在就会有一个好的、正确的答案。

标签: c++ constructor g++


【解决方案1】:

Time* courses = new Time[3]; 创建一个包含 3 个 Time 对象的数组 - 这需要 Time 具有默认构造函数(因为需要在创建数组时构造对象)。

如果您不想为Time 创建默认构造函数考虑 使用std::vector,并将必要的对象一次一个地插入向量中。

【讨论】:

  • 这是使用 std::vector 的一个很好的理由,它对包含的类没有这样的要求。
  • 我稍微更新了这个问题,明确声明了一个默认构造函数。在编译这段代码时,我仍然遇到同样的错误。有什么建议吗?
  • Time:() 看起来是一个语法错误(他说,多年来没有接触过 C++...:))。
  • 那是我打错了,因为我不想再次粘贴整个块,因为格式很奇怪。所以这不是问题。如果我也在那里编译,我会得到一个额外的错误。
  • 你不需要Time::Time(),而不仅仅是Time::()吗?
【解决方案2】:

看起来,编译器无法将您的Time(int, int) 构造函数识别为默认构造函数(使用new Time[3] 时需要),尽管整数具有默认参数。只需尝试将真正的默认构造函数添加到 Time

【讨论】:

    【解决方案3】:

    我遇到了两个错误,都与你的不同。

    使用 g++ 4.4.5,Course::printTimes() 中未定义变量 count,并且 Course 构造函数的原型 ... 与声明不匹配。 Time() 构造函数没有问题。

    【讨论】:

    • 哦,哎呀。好吧,我尝试修复这些东西,但我仍然遇到同样的错误。我怀疑这与我的电脑有关。我正在运行 Mac OS X 10.5,只是在终端外使用 g++ 进行编译。
    • 尝试删除 Time(int h = 0, int m = 0); 的默认参数;
    【解决方案4】:
    Time:() 
    {
    };
    

    应该是

    Time::Time() 
     : hours(0), minutes(0)
    {
    }
    

    或类似的

    【讨论】:

      猜你喜欢
      • 2012-01-19
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多