如何在C ++代码中使用C结构?

时间:2014-08-13 21:53:25

标签: c++ c struct lis

我正在尝试编写一个应该在C ++程序中使用C库(LIS库)的程序。结构对象的创建/初始化似乎存在问题。

当我在维基百科页面上运行示例程序时:http://en.wikipedia.org/wiki/Lis_%28linear_algebra_library%29它像魅力一样运行,但当然是编译为C程序。

在我的C ++代码中,我按如下方式执行:

#include "stdafx.h"
#include <iostream>

extern "C"
{
#include "lis.h"
#include "lis_config.h"
    LIS_MATRIX A;

}
using namespace std;


int main(LIS_INT argc, char* argv[])
{
    lis_initialize(&argc, &argv);
    lis_matrix_create(LIS_COMM_WORLD, &A);
    getchar();

    return 0;
}

当我运行此代码时,它在lis_matrix_create行给出了访问冲突。好像A有一个内存地址,它的数据成员(LIS_MATRIX被定义为Lis.h中的结构)尚未初始化,因此它们的地址为NULL。

请您告诉我如何创建LIS_MATRIX,以便我可以像维基百科页面上的示例代码一样使用它?

提前谢谢!

回复亚当和罗斯里奇: 我在Windows 7 64位上使用visual studio 2013。 Lis库的手册指出它与Visual Studio 2008,2010和2012编译器以及gcc 3.4和4.4以及一些IBM,Intel和PGI C ++编译器兼容,我希望Visual Studio 2013不会成为问题。

此外,在此代码中,如果我取出&#39; extern C&#39;阻止,并包括&#39; stdio.h&#39;而不是iostream,它运行没有问题(所以我猜这意味着使用C编译器?)。我还包括iostream,访问违规开始。

1 个答案:

答案 0 :(得分:1)

你包括

lis_config.h

lis.h

本身就是一个错误(你必须先包含它)。此外,如果您触及lis_config中的任何内容,则必须重建整个库(使用项目的大多数相同编译器标志,例如“-msee2”,如果您使用SSE2)。在重建之前只需交换标头,看看是否足够..

更多的话:一个库可以轻松地检测错误顺序中包含的标题,为lis开发人员制作一张票。