Ошибка точки входа в процедуру C ++ - PullRequest
0 голосов
/ 14 мая 2018

Я получаю диалог отмены в Visual Studio. this error message

Это код:

#include <iostream>
#include <string>

class DateTime
{
public:
    DateTime(unsigned year, unsigned month, unsigned date, unsigned hour, unsigned minute, unsigned second);
    DateTime(unsigned year, unsigned month, unsigned date);
    ~DateTime();
    std::string get_string();
private:
    unsigned year;
    unsigned month;
    unsigned day;
    unsigned hour;
    unsigned minute;
    unsigned second;
};

std::string DateTime::get_string()
{
    // dd/MM/yyyy hh:mm:ss
    std::string day_s = (this->day < 10) ? "0" + this->day : std::to_string(this->day);
    std::string month_s = (this->month < 10) ? "0" + this->month : std::to_string(this->month);
    std::string year_s = std::to_string(this->year);
    std::string hour_s = (this->hour < 10) ? "0" + this->hour : std::to_string(this->hour);
    std::string minute_s = (this->minute < 10) ? "0" + this->minute : std::to_string(this->minute);
    std::string second_s = (this->second < 10) ? "0" + this->second : std::to_string(this->second);

    return day_s + "/" + month_s + "/" + year_s + " " + hour_s + ":" + minute_s + ":" + second_s;
}

DateTime::DateTime(unsigned year, unsigned month, unsigned date)
{
    if (month > 12 || day > 31)
            throw std::out_of_range("DateTime out of valid range");

    unsigned max_d = 31;

    if (month == 4 || month == 6 || month == 9 || month == 11)
        max_d = 30;
    else if (month == 2) {
        max_d = 28;
        if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
            max_d = 29;
    }

    if (day > max_d)
        throw std::out_of_range("DateTime out of valid range");

    this->year = year;
    this->month = month;
    this->day = day;

    this->hour = 0;
    this->minute = 0;
    this->second = 0;

}

DateTime::DateTime(unsigned year, unsigned month, unsigned date, unsigned hour, unsigned minute, unsigned second)
{
    if (month > 12 || day > 31 || hour > 24 || minute > 60 || second > 60)
            throw std::out_of_range("DateTime out of valid range");

    unsigned max_d = 31;

    if (month == 4 || month == 6 || month == 9 || month == 11)
        max_d = 30;
    else if (month == 2) {
        max_d = 28;
        if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
            max_d = 29;
    }

    if (day > max_d)
        throw std::out_of_range("DateTime out of valid range");

    this->year = year;
    this->month = month;
    this->day = day;
    this->hour = hour;
    this->minute = minute;
    this->second = second;

}

DateTime::~DateTime()
{
}


int main(int argc, char const *argv[])
{
    DateTime d1(2018, 5, 14);

    std::cout << d1.get_string();

    return 0;
}

Обратите внимание, что я не использую предварительно скомпилированные заголовки, потому что я компилировал их в терминале и пытался отлаживать в Visual Studio. В терминале ошибка, которую я получаю:

myprog.exe
Точка входа не найдена
Точка входа в процедуру _ZNKSt7__cxx1112basic_stringlcSt11char_traitsIcESalcEE7_M_dataEv мог не находиться в динамической библиотеке C: ...... \ myprog.exe

Я очень далек от понимания того, что это значит. Может ли кто-нибудь мне помочь?

Я считаю, что это ошибка во время выполнения? Я искал похожие ошибки, и большинство из них связано с DLL. Это тот случай?

Edit: Я скомпилировал исходный файл с g++ myProg.cpp -o myprog

1 Ответ

0 голосов
/ 15 мая 2018

строковый оператор + не имеет перегрузок, которые принимают unsigned с правой стороны.

Заменить

std::string day_s = (this->day < 10) ? "0" + this->day : std::to_string(this->day);

с

std::string day_s = (this->day < 10) ? "0" + std::to_string(this->day) : std::to_string(this->day);

и т. Д.

...