【问题标题】:Expression must have integral or enum type Char*表达式必须具有整数或枚举类型 Char*
【发布时间】:2013-12-20 01:30:29
【问题描述】:

我有一个 MFC 项目,它做这样的事情

CString getTimeString( 无效 ) { 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() );
}

它会抛出一个错误
" 表达式必须是整数或枚举类型..."
仔细看,我意识到因为它不是 std::String 我们不能像这样加起来.. 所以我的问题是我如何在 QT 中实现与在 VS2010 中完全相同的方式返回函数(如上所示)。

【问题讨论】:

    标签: c++ visual-studio-2010 qt stdstring


    【解决方案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();
    

    【讨论】:

    • 嗨,eveyrone,我已经按照 Vaqhancho 的建议进行了更改,但我得到了如下错误:\mydir\application\libs\lib_know/FileVersioninfo.h(83): error C2440: 'default argument' : 无法从 'int' 转换为 'know::FileVersionInfo::Pcalculator' 1> 源或目标的类型不完整 1>C:\mydir\application\libs\lib_know/FileVersioninfo.h(83): error C2548: 'know ::init_file_version_info':缺少参数 1 的默认参数 1>MessagingInterface.cpp(32):错误 C2143:语法错误:缺少 ';'在'.'之前
    • 实际上在其他项目中使用 CString 的上述函数工作正常。我想知道它与 QVariant 有什么关系吗?
    • 我在发布回复之前也尝试过,但它不起作用。我什至尝试过类似的方法 QString convert(const std::string& s) { return QString::fromStdString(s); }
    • 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 ) ) ) ; // return ("稍后实现"); }
    • 我已经在不同的帖子中重新发布了我的 qs(因为我认为它的问题不同)并且有人建议“没有需要 char* 的 arg 过载,但我不明白他的意思行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多