2

我正在尝试使用 Kohonen 的原始 som 实现,但使用 vcal 时出现分段错误错误。

事实证明,您可以使用一个非官方版本来纠正在 http://cis.legacy.ics.tkk.fi/hynde/lvq/上发现的这个错误, 但它是从 1997 年开始的,我确信有很多变化在 cc 编译器中,所以我收到此错误

    checo@canija:~/bin/som/som_pak-3.2$ 制作
    gcc -O2 -c -o vcal.o vcal.c
    在 datafile.h:28 包含的文件中,
                     来自 vcal.c:26:
    fileio.h:69:错误:“getline”的类型冲突
    /usr/include/stdio.h:651:注意:“getline”的先前声明在这里
    制作:*** [vcal.o] 错误 1
    checo@canija:~/bin/som/som_pak-3.2$

文件 datafile.h

    1:#ifndef SOMPAK_DATAFILE_H
    2:#define SOMPAK_DATAFILE_H
    ...
    24:#包括
    25:#包括
    26:#include "lvq_pak.h"
    27:#include "errors.h"
    28:#include "fileio.h"

我能做些什么来重新编译这段代码吗?

4

1 回答 1

1

将评论转换为答案以解决问题。

getline()现在是 POSIX 函数;它不是在 1997 年。您最好的选择可能是重命名该函数fileio.h以及使用它的位置,也许就像getline#include <stdio.h>.

#undef getline
#define getline(a, b, c) som_getline(a, b, c)

使用正确数量的参数,或

#define getline(...) som_getline(__VA_ARGS__)

如果<stdio.h>尚未包含,则添加它以确保getline()正常声明,然后由您的宏映射。

于 2014-05-27T18:40:59.533 回答