【问题标题】:Shuffle Array -> Request for member in something not a structure or unionShuffle Array -> 请求非结构或联合中的成员
【发布时间】:2021-12-07 21:56:20
【问题描述】:

我有这段代码可以生成一副牌的所有可能拆分

void divide(CardDeck origDeck, CardDeck * leftDeck, CardDeck * rightDeck)
{
  int size = origDeck.size - 1 ;
  
  for (int i = 0; i < size; size++){
    int midpoint = i + 1;
    int j = 0;
    int k = 0;
    while (j < midpoint){
      leftDeck.cards[j] = origDeck.cards[j];
      j++;
    }
    int remaining = origDeck.size - j;
    while (k < remaining){
      rightDeck.cards[k] = origDeck.cards[j];
      k++;
      j++;
    }
    void interleave(CardDeck leftDeck, CardDeck rightDeck);
  }

但是我在这里不断收到此错误。我尝试将 -> 替换为点运算符,但它仍然给出另一个错误

gcc -std=c99 -g -Wall -Wshadow --pedantic -Wvla -Werror -DTEST_INTERLEAVE -DTEST_DIVIDE -DTEST_SHUFFLE -c shuffle.c 
shuffle.c: In function ‘divide’:
shuffle.c:52:15: error: request for member ‘cards’ in something not a structure or union
       leftDeck.cards[j] = origDeck.cards[j];
               ^
shuffle.c:57:16: error: request for member ‘cards’ in something not a structure or union
       rightDeck.cards[k] = origDeck.cards[j];
                ^
make: *** [shuffle.o] Error 1

这是我在更换 .带箭头操作符

shuffle.c: In function ‘divide’:
shuffle.c:52:36: error: invalid type argument of ‘->’ (have ‘CardDeck’)
       leftDeck->cards[j] = origDeck->cards[j];
                                    ^
shuffle.c:57:37: error: invalid type argument of ‘->’ (have ‘CardDeck’)
       rightDeck->cards[k] = origDeck->cards[j];
                                     ^
make: *** [shuffle.o] Error 1
bash-4.2$ 

头文件是这样的:

#ifndef SHUFFLE_H
#define SHUFFLE_H
#include <stdlib.h>

#define MAX_SIZE 13

typedef struct
{
  char cards[MAX_SIZE];
  int size;
} CardDeck;

void divide(CardDeck origDeck, CardDeck* leftDeck, CardDeck* rightDeck);
void interleave(CardDeck leftDeck, CardDeck rightDeck);
void shuffle (CardDeck origDeck);

【问题讨论】:

  • -&gt; 是正确的。如果您收到另一个错误,请显示它。此外,我们需要完整的代码。请以minimal reproducible example 的形式提供。
  • CardDeck 是什么?您是否包含正确的头文件?
  • leftDeck.cards[j] = origDeck.cards[j]; --> leftDeck-&gt;cards[j] = origDeck.cards[j];
  • origDeck 是结构的一个实例,因此您使用点 . 表示法,例如origDeck.cards[j]leftDeckrightDeck 是指向结构的 指针,因此您使用箭头 -&gt; 表示法,例如leftDeck-&gt;cards[j]
  • 你希望下面这行做什么? void interleave(CardDeck leftDeck, CardDeck rightDeck);

标签: arrays c struct shuffle


【解决方案1】:

origDeck 更改为指针

void divide(CardDeck *origDeck, CardDeck *leftDeck, CardDeck *rightDeck)

leftDeck->cards[j] = origDeck->cards[j];
rightDeck->cards[k] = origDeck->cards[j];

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多