Изразът трябва да има интегрален тип или тип enum Char*

Имам MFC проект, който прави нещо подобно

CString getTimeString( void ) { SYSTEMTIME systemTime; CString datestr;

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... "
ON по-отблизо Осъзнавам, че тъй като не е 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
Здравейте eveyrone, Направих промените, както беше предложено от 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
Публикувах отново моя qs в друга публикация (тъй като си мислех, че проблемът е различен) и някой предположи, че няма претоварване на 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
Благодаря, приятелю, за цялата помощ, която ми оказа. Проблемът е, че know::init_file_version_info се използва от много други проекти, работещи на vs2010 и в linux, и всички тези проекти използваха функцията, която публикувах под vs2010 и те не извеждайте никаква грешка, само за да съм на сигурно място, компилирах стари проекти и те изглежда работят добре .. така че чувствам, че нещо не е наред с моя проект. Коментирах цялата функция и тя все още извежда грешка, ако включа тези заглавни файлове .. така че може нещо да не е наред с включването на тези заглавни файлове - person samprat; 04.12.2013
comment
РЕШЕНО!!!!!.. know::init_file_version_info използваше някаква библиотека за усилване, която не съм включил чрез използване на метода hit and trail Сега работи... - person samprat; 04.12.2013