我正在尝试编写一个应该在 C++ 程序中使用 C 库(LIS 库)的程序。结构对象的创建/初始化似乎存在问题。
当我在 wikipediapage 上运行示例程序时: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,以便我可以像在维基百科页面上的示例代码中那样使用它?
先感谢您!
回复 Adam 和 Ross Ridge:我在 Windows 7 64 位上使用 Visual Studio 2013。Lis 库的手册说它兼容 Visual Studio 2008、2010 和 2012 编译器,也兼容 gcc 3.4 和 4.4 以及一些 IBM、Intel 和 PGI C++ 编译器,我希望 Visual Studio 2013 不会有问题。
此外,在这段代码中,如果我取出“extern C”块,并包含“stdio.h”而不是 iostream,它运行没有问题(所以我猜这意味着使用了 C 编译器?)。在我还包括 iostream 的那一刻,访问冲突就开始了。