我一直在用C 撰寫Qt中的時間類,我需要撰寫一個enum類,其中包含我在showTime()中使用的格式。由于QString格式的性質,我一直得到以下錯誤,該值不能轉換為'int'。如果有任何幫助或建議,我將非常感激。
P.S: 以下是代碼:
enum class TimeFormat {
a = "hh:mm:ss"。
b = "hh:mm",
c = "H:m:s a".
};
class Time {
public:
Time()。
~Time()。
void setTime(QTime t);
QString showTime(){
return time>toString(format)。
}
private:
QTime* time。
TimeFormat格式。
};
uj5u.com熱心網友回復:
列舉的底層型別必須是一個整數型別。所以你不能用char const*來做這個。在你的案例中,你可以使用一個與你的列舉相關的私有陣列:
class Time {
public:
enum class Format {
a, b, c
};
public:
時間()。
~Time()。
void setTime(QTime t);
QString showTime(Format const f){
time>toString(format.at(static_cast<size_t>(f) )。
}
private:
QTime* time。
static inline std:: array<char const*, 3> constexpr format =
{ "hh:mm:ss", "hh:mm", "H:m:s a" };
};
uj5u.com熱心網友回復:
enumeration底層型別必須是一個整數型別。它不能是一個字串。你可以使用一些代碼將字串與列舉值聯系起來。
示例(最低C 17):
enum class TimeFormat {
a,
b,
c
};
constexpr std::string_view toStringFormat(TimeFormat format)
{
使用 名字空間 std::literals。
constexpr std::array formats{ "hh:mm:ss"sv, "hh:mm"sv, "H:m:s a"sv};
return formats[static_cast<size_t>(format)]。
}
https://godbolt.org/z/Y6P6Wa4K5
uj5u.com熱心網友回復:
在C 中,Enum的底層型別必須是一個整數,但是Swift和Java語言支持類似你所嘗試的東西。
無論如何,請嘗試下面的方法。
my-time.h檔案:
enum TimeFormat {
a,
b,
c
};
class Time {
public:
Time()。
~Time()。
void setTime(QTime t);
QString showTime()。
private:
QTime* time。
TimeFormat格式。
};
my-time.cpp檔案:
#include "my-time.h"
const char * const FORMAT_STRING_MAP[] = [
"hh:mm:ss"。
"hh:mm"。
"H:m:s a".
];
QString Time::showTime()
{
time>toString(FORMAT_STRING_MAP[format])。
}
uj5u.com熱心網友回復:
我使用了一個開關陳述句
enum class TimeFormat {
format1,
format2,
format3。
};
class Time {
public:
Time()。
~Time()。
void setTime(int h。int m, int s)。
QString showTime() const{
QString f;
switch (format) {
case TimeFormat::format1:
f="hh:mm:ss"。
break。
case TimeFormat::format2:
f = "hh:mm"。
break。
case TimeFormat::format3:
f= "H:m:s a"。
break。
}
return time>toString(f)。
}
void changeFormat(TimeFormat f);
private:
QTime* time。
TimeFormat格式。
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/310178.html
標籤:
