Выражение должно иметь целочисленный тип или тип enum Char*

У меня есть проект MFC, который делает что-то вроде этого

CString getTimeString(void) { SYSTEMTIME systemTime; CString датастр;

GetSystemTime( &systemTime );

datestr.Format( "%02i/%02i/%04i, %02i:%02i:%02i",
    systemTime.wDay, systemTime.wMonth, systemTime.wYear,
    systemTime.wHour, systemTime.wMinute, systemTime.wSecond );

return ( datestr + "; " + get_file_info().PName.c_str() + ", " + get_version_info().PVersion.c_str() );

}

Теперь я копирую что-то подобное в QT

char* getTimeString( void )
{
     QDateTime      systemTime = QDateTime::currentDateTime();
      QString       datestr  = systemTime.toString() ;



    /*GetSystemTime( &systemTime );

    datestr.Format( "%02i/%02i/%04i, %02i:%02i:%02i",
        systemTime.wDay, systemTime.wMonth, systemTime.wYear,
        systemTime.wHour, systemTime.wMinute, systemTime.wSecond );

*/

    return ( datestr.toStdString().c_str() + "; " + get_file_info().PName.c_str() + ", " + get_version_info().PVersion.c_str() );
}

Он выдает ошибку
"Выражение должно иметь целочисленный тип или тип enum..."
ВКЛ. Внимательнее Посмотрите, я понимаю, что, поскольку это не std::String, мы не можем складывать вот так.. Итак, мой вопрос: как бы Я получаю функцию возврата в QT точно так же, как это делается в VS2010 (показано выше).


person samprat    schedule 03.12.2013    source источник


Ответы (1)


Я бы сделал это следующим образом:

[..]
return QString("%1; %2, %3")
               .arg(datestr)
               .arg(QString(get_file_info().PName.c_str()))
               .arg(QString(get_version_info().PVersion.c_str())).toLocal8Bit().data();
person vahancho    schedule 03.12.2013
comment
Привет всем, я внес изменения, как было предложено Vaqhancho, но я получаю ошибку, например:\mydir\application\libs\lib_know/FileVersioninfo.h(83): ошибка C2440: «аргумент по умолчанию»: невозможно преобразовать из «int» в 'know::FileVersionInfo::Pcalculator' 1> Источник или цель имеет неполный тип 1> C:\mydir\application\libs\lib_know/FileVersioninfo.h(83): ошибка C2548: 'know::init_file_version_info': отсутствует параметр по умолчанию для параметра 1 1>MessagingInterface.cpp(32): ошибка C2143: синтаксическая ошибка: отсутствует ';' до '.' - person samprat; 04.12.2013
comment
На самом деле в другом проекте вышеуказанная функция с CString работает нормально. Мне интересно, связано ли это с QVariant? - person samprat; 04.12.2013
comment
Я тоже пробовал это, прежде чем опубликовать ответ, но это не работает. Я пробовал даже что-то вроде этого QString convert(const std::string& s) { return QString::fromStdString(s); } - person samprat; 04.12.2013
comment
char* getTimestampString(void) { QDateTime systemTime = QDateTime::currentDateTime(); QString datestr = systemTime.toString() ; return(QString(%1; %2, %3).arg(datestr).arg(convert(get_file_version_info().ProductName)) .arg(convert(get_file_version_info().ProductVersion)) )); // возврат (реализуем позже); } - person samprat; 04.12.2013
comment
Я разместил свои вопросы в другом посте (поскольку я думал, что это другая проблема), и кто-то предположил, что нет перегрузки arg, которая принимает char*, но я не понял, что он имел в виду под этой строкой. - person samprat; 04.12.2013
comment
ниже приведена ссылка на мой новый пост stackoverflow.com/questions/20375642/ - person samprat; 04.12.2013
comment
@samprat, полученная вами ошибка относится к know::init_file_version_info, а не к материалам Qt. Что это такое? Выясните, почему компилятор жалуется. При вызове какой функции? - person vahancho; 04.12.2013
comment
Спасибо, приятель, за всю помощь, которую вы мне оказали. Проблема в том, что знаю:: init_file_version_info используется многими другими проектами, работающими на vs2010 и в Linux, и все эти проекты использовали функцию, которую я разместил в vs2010, и они не выдавайте никаких ошибок, просто на всякий случай я скомпилировал старые проекты, и они, похоже, работают нормально ... поэтому я чувствую, что в моем проекте что-то не так. Я прокомментировал всю функцию, и она все еще выдает ошибку, если я включаю эти файлы заголовков.. так что может быть что-то не так с включением этих файлов заголовков - person samprat; 04.12.2013
comment
РЕШЕНО !!!!!.. знаю:: init_file_version_info использовал некоторую библиотеку повышения, которую я не включил, используя метод hit and trail. Теперь он работает... - person samprat; 04.12.2013