【发布时间】: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);
【问题讨论】:
-
->是正确的。如果您收到另一个错误,请显示它。此外,我们需要完整的代码。请以minimal reproducible example 的形式提供。 -
CardDeck是什么?您是否包含正确的头文件? -
leftDeck.cards[j] = origDeck.cards[j];-->leftDeck->cards[j] = origDeck.cards[j]; -
origDeck是结构的一个实例,因此您使用点.表示法,例如origDeck.cards[j]。leftDeck和rightDeck是指向结构的 指针,因此您使用箭头->表示法,例如leftDeck->cards[j] -
你希望下面这行做什么?
void interleave(CardDeck leftDeck, CardDeck rightDeck);