0

このプログラムは、子プロセスが特定の長さ (引数) のフィボナッチ数列を保存し、親プロセスがそれを吐き出す、子プロセスと親プロセスの間の共有メモリを作成することを想定しています。また、共有メモリの着脱も想定しています。このエラーが発生するという事実を除いて、すべてが機能しているようです:

proj2.cpp:40: error: no match for 'operator*' in 'shared_data *shm' error

何か助けはありますか?以下のコード。

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <iostream>

#define MAX_SEQUENCE 10

struct shared_data{
    long fib_sequence[MAX_SEQUENCE];
    int sequence_size;
} shared_data;

using namespace std;

char * shm;

int Fibonacci(int n){
    int first = 0, second = 1, temp = 0;
    shared_data.fib_sequence[0] = first;
    shared_data.fib_sequence[1] = second;
    for(int i = 2; i<=n; i++){
            temp = first + second;
            shared_data.fib_sequence[i] = temp;
            first = second;
            second = temp;
    }
    return 0;
}

int main(int argc, char *argv[])
{
    pid_t pid;
    int seg_id;
    const int shd = 4096;
    seg_id = shmget(IPC_PRIVATE, shd, S_IRUSR | S_IWUSR);
    shared_data *shm = shmat(seg_id, NULL, 0); 
    int number = atoi(argv[1]);    
    if(number < 0 || number > 10){
        cout << "Invalid number. Please enter a number greater than 0 \n";
        return(1);
    }
    shared_data.sequence_size = number;
    pid = fork();
    if(pid == 0)
        Fibonacci(number);
    else{
        waitpid(pid,0,0);
        for (int i = 0; i <= shared_data.sequence_size; i++)
            cout << shared_data.fib_sequence[i];
        cout << "\n";
    }
    return 0;
}
4

2 に答える 2

0

構造体を定義shared_dataし、同時にshared_data.... という名前の型のオブジェクトを作成しましたshared_data

次に、char*呼び出された を作成しますshm

したがって、shared_data *shm = shmat(seg_id, NULL, 0);*二項演算子として解釈され、オブジェクトを char ポインターで*「乗算」しようとします。shared_datashm

于 2013-03-04T03:29:06.063 に答える
0

この行:

shared_data *shm = shmat(seg_id, NULL, 0);

次のプロパティがあります。

  1. shared_data型ではなくオブジェクトです。
  2. shmも以前に宣言されたオブジェクトです。
  3. これらの 2 つの変数を掛け合わせて、結果に代入しようとしています。

次のようなものが必要な場合があります。

struct shared_data *shm = shmat(seg_id, NULL, 0);

またはtypedef、構造体の宣言でa を使用することもできますshared_data

于 2013-03-04T03:29:56.703 に答える