0

私はこのコードを持っています:

using Posix;

int fuseguifs_getattr(string path, Posix.Stat *stbuf)
{
    int res;
    res = Posix.lstat(path, stbuf);
    if (res == -1)
        return -Posix.errno;

    return 0;
}

static int main(string [] args)
{
    Posix.Stat *a;
    fuseguifs_getattr("/home/leon", a);
    return 0;
}

コンパイルしようとすると、次のエラーが発生します。

test.vala:6.26-6.30: error: Argument 2: Cannot convert from
`Posix.Stat' to `Posix.Stat*'
    res = Posix.lstat(path, stbuf);
                            ^^^^^
Compilation failed: 1 error(s), 0 warning(s)

これを変更してみました:fuseguifs_getattr( "/ home / leon"、a); にfuseguifs_getattr( "/ home / leon"、* a);

しかし、エラーが発生します:「参照または出力パラメーターに値を渡すことができません」

「out」を追加してみました:res = Posix.lstat(path、out * stbuf);

これにより、次のエラーが発生します。エラー:refおよびoutメソッドの引数は、フィールド、パラメーター、ローカル変数、および配列要素へのアクセスでのみ使用できます。

ヒューズバインディングがそれを期待する方法の一部であるため、fuseguifs_getattrメソッドパラメーターを変更することはできません。

私は本当に立ち往生しています。誰か私がこれを解決する方法はありますか?

4

2 に答える 2

3

私はあなたがこのようなことをしたいと思います:

int fuseguifs_getattr(string path, out Posix.Stat stbuf) {
   int res;
   res = Posix.lstat(path, out stbuf);
   if (res == -1)
      return -Posix.errno;
   return 0;
 }

static int main(string [] args)
{
    Posix.Stat a;
    fuseguifs_getattr("/home/leon", out a);
    return 0;
}

Posix.Statlstat が入力する構造体です。その構造体へのポインターを渡すのではなく、Vala は、キーワードと同様に、宣言と使用の両方で指定する必要があるキーワードをlstat使用して、出力として使用されることを示すことを期待しています。そのため、 である関数定義は、関数を呼び出すときに再度指定する必要があります。outrefoutout

于 2011-11-08T21:33:22.983 に答える
0

これはそれを解決するようです:

int fuseguifs_getattr(string path, Posix.Stat *stbuf)
{
    int res;
    Posix.Stat a;
    res = Posix.lstat(path, stbuf);

    if (res == -1) {
        return -Posix.errno;
    }
    *stbuf = a;

    return 0;
}

それは正しい方法でしょうか?

于 2011-11-09T07:44:54.803 に答える