DM_simtoolTest.h:39:错误:从`int(*)(int)'转换为非标量类型`std :: string'请求

时间:2009-03-16 11:28:52

标签: c++

我的代码:

功能:它是一个函数需要三个参数并创建一个文件。

void performLog(string strStoredProcName, int nCount, double time)

{
    int tme=(int) time;

    int hour=tme/3600;

    tme=tme%3600;

    int min=tme/60;

    tme=tme%60;
    int sec=tme;

    char *StrLen;
    int len = 0;
    int lenpass = 0;

    StrLen = &strStoredProcName[0];
    len = strlen(StrLen);

    lenpass = 41 - len;

       fstream outFile( "Perform.out", ios_base::out | ios_base::app );

        if ( ! outFile ) 
        {
            cerr << "Cannot open 'Perform.out' for output" << "\n" << endl;
            exit(-1);
        }

    if (paramLogCreation == false)
    {

        outFile << "**************Performance Log*********************" << "\n" << endl; 
        outFile << "DB Type: MYSQL" << "\n" << endl;
        outFile << "-----------------------------------------------------------------------------------------" << "\n" << "\t" << "\t" << "\t" << "\t" << "Stored Procedure Statitics" << "\n" << endl;
        outFile << "-----------------------------------------------------------------------------------------" << "\n" << endl;
        outFile << "Store Procedure Name" << setw(30) << "Execution Count" << setw(30) << "Time Taken to Execute" << "\n" << endl; 
        paramLogCreation = true ;        
    }


    outFile << strStoredProcName << setw(lenpass) << nCount << setw(20) <<hour<<"::"<<min<<"::"<<sec <<"\n" << endl;
    outFile.close();
}

这里我正在为我编写的代码编写一个单元测试用例,这个函数就是其中的一个函数。 请帮帮我,如何解决这个问题。 请问我是C ++的新手,需要知道我犯了错误的地方。

3 个答案:

答案 0 :(得分:1)

我认为这是错误:

void performLog(string strStoredProcName, int nCount, double time)
[...]
char *StrLen;
[...]
StrLen = &strStoredProcName[0];

要将字符串转换为char *,您应该使用c_str

StrLen = new char [strStoredProcName.size()+1];
strcpy (StrLen, strStoredProcName.c_str());

答案 1 :(得分:1)

假设用字符串表示std :;字符串然后当你说:

StrLen = &strStoredProcName[0];
len = strlen(StrLen);

无法保证proc名称包含一个以null结尾的字符串供strlen()使用。如果您想要字符串的长度,请使用 size()成员函数:

len = strStoredProcName.size();

但是,这不应该导致您收到的错误消息,所以请在您的帖子中指明错误是什么!!!

答案 2 :(得分:0)

看起来你得到的错误是在头文件(DM_simtoolTest.h)中,而不是源文件,你似乎已将其粘贴到问题中。

编译器抱怨你的代码试图使用函数指针(这是奇怪的int (*)(int)语法)来获取字符串。在没有看到相关代码的情况下,我的第一个(疯狂的,推测性的)猜测是你忘记引用你想要测试的函数的名称。我还需要查看标题的来源以正确识别问题。