有趣的代码行为

时间:2017-05-17 15:49:43

标签: c++ mysql linux

我正在尝试使用main()函数中的以下代码连接到mysql数据库。

MYSQL *connect = mysql_init(NULL);

工作正常,我得到一个返回的指针值。

我创建了另一个带有函数的c ++文件,如下所示

int Newl_connection(FileHandler& pProcLog)
{
    MYSQL *connect = mysql_init(NULL);
    return 0;
}

编译和链接很好,我已经对main函数中的相同代码行进行了多次调用(作为测试),但是当我运行代码时它在Newl_connection()函数的行中失败了。 / p>

我已将Newl_connection剥离到尽可能基本,并将包含Main()的文件中的所有头文件包含到包含Newl_connection()函数的文件中。

我收到的编译错误是

  

编程接收信号SIGABRT,已中止。   __GI_raise中的0x00007ffff6bc6428(sig = sig @ entry = 6)at ../sysdeps/unix/sysv/linux/raise.c:54   54 ../sysdeps/unix/sysv/linux/raise.c:没有这样的文件或目录。

     

尝试使用类型名称作为表达式。

     

尝试将类型名称用作表达式

尝试将类型名称用作表达式。对于所有实例调用都会出现,但Newl_connection()函数中的调用是终端。

我已尝试删除main()中的所有其他实例,但仍然遇到同样的问题。

为什么代码应该在一个地方工作但在另一个地方表现不同? 我将非常感谢你在这个问题上的结束。

1 个答案:

答案 0 :(得分:0)

根据你的功能标题:

int Newl_connection(FileHandler& pProcLog)

您应该使用FileHandler类型的有效对象来调用它。 将变量名称设置为pProcLog会让我觉得您想将它用作指向对象的指针。然后声明应该是:

int Newl_connection(FileHandler* pProcLog)

这样,您可以使用null值作为参数调用函数safe。