2013-03-04 46 views
0

此程序假设在子进程和父进程之间创建共享内存,其中子进程将特定长度(参数)的斐波那契数列保存到其中父进程将其吐出。它也假设连接和分离共享内存。一切似乎功能,除了我得到这个错误的事实:'shared_data * shm'中的'operator *'不匹配

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; 
} 

回答

0

你定义一个结构shared_data,并在同一时间产生shared_data类型的对象的名称.... shared_data

然后您创建一个名为shmchar*

所以在shared_data *shm = shmat(seg_id, NULL, 0);,该*被解释为二进制*运营商,试图“乘法”你的对象shared_data与字符指针shm

0

这条线:

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

具有以下性质:

  1. shared_data是一个对象,而不是一种类型。
  2. shm也是早些时候宣布的对象。
  3. 您试图将这两个变量相乘,然后分配给结果。

你可能想是这样的:

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

或者,你可能想在你的shared_data结构的声明中使用typedef

+0

当我使用typedef我得到这些错误代码“预期之前的非限定id”。令牌“和”预期的主要表达之前“。令牌” – 2013-03-04 03:34:33