Type declaration problems (Watcom C v10.6B)

Here is a snip from sshpk.h (SSH v3.2.9.1):

struct SshPkTypeRec
{
/* Name for key. Keys are named/typed as follows:

if-modn for RSA etc.
dl-modp for DSA, ElGamal etc.
ec-modp for ECDSA, ECElGamal etc.
ec-gf2n for ECDSA, etc.
*/
const char *name;

/* Special actions, for key management. I.e. things like inserting
parameters, fixing exponent etc. */
const SshPkAction *action_list;

/********************************************************************

    1. Group actions
      ********************************************************************/
      void * (*pk_group_action_init)(void);
      void * (*pk_group_action_make)(void *context);
      void (*pk_group_action_free)(void *context);

Boolean (*pk_group_import)(const unsigned char *buf,
size_t length,
void **pk_group);
Boolean (*pk_group_export)(const void *pk_group,
unsigned char **buf,
size_t *length_return);
void (*pk_group_free)(void *pk_group);
void (*pk_group_copy)(void *op_src, void **op_dest);

char * (*pk_group_get_predefined_groups)(void);
void (*pk_group_precompute)(void *context);

/* Randomizer handling. */
unsigned int (*pk_group_count_randomizers)(void *pk_group);
Boolean (*pk_group_generate_randomizer)(void *pk_group);
Boolean (*pk_group_export_randomizer)(void *pk_group,
unsigned char **buf,
size_t *length_return);
Boolean (*pk_group_import_randomizer)(void *pk_group,
const unsigned char *buf,
size_t length);

/********************************************************************

    1. Public key actions
      ********************************************************************/
      void *(*public_key_action_init)(void);
      void *(*public_key_action_make)(void *context);
      void (*public_key_action_free)(void *context);

Boolean (*public_key_import)(const unsigned char *buf,
size_t len,
void **public_key);
Boolean (*public_key_export)(const void *public_key,
unsigned char **buf,
size_t *length_return);
void (*public_key_free)(void *public_key);
void (*public_key_copy)(void *op_src, void **op_dest);

void (*public_key_derive_pk_group)(void *public_key,
void **pk_group);
void (*public_key_precompute)(void *context);

/********************************************************************

    1. Private key actions
      ********************************************************************/
      void *(*private_key_action_init)(void);
      void *(*private_key_action_define)(void *context);
      void *(*private_key_action_generate)(void *context);
      void (*private_key_action_free)(void *context);

Boolean (*private_key_import)(const unsigned char *buf,
size_t len,
void **private_key);
Boolean (*private_key_export)(const void *private_key,
unsigned char **buf,
size_t *length_return);
void (*private_key_free)(void *private_key);
void (*private_key_derive_public_key)(const void *private_key,
void **public_key);

void (*private_key_copy)(void *op_src, void **op_dest);

void (*private_key_derive_pk_group)(void *private_key,
void **pk_group);
void (*private_key_precompute)(void *context);

/* More to come… */
};

/* Maximum of provider slots. It is assumed that SSH modules will not
add very many providers. */

#define SSH_PK_TYPE_MAX_SLOTS 16
extern SshPkType const * ssh_pk_type_slots[SSH_PK_TYPE_MAX_SLOTS];

Here is a snip from sshcrypt.h:
/************************* Public key cryptography ************************/

typedef struct SshPkTypeRec SshPkType;
SshCryptoStatus ssh_pk_provider_register(const SshPkType *type);

#ifdef SSHDIST_CRYPT_RSA
extern const SshPkType ssh_pk_if_modn;
extern const SshPkType ssh_pk_if_modn_generator;
#endif /* SSHDIST_CRYPT_RSA */

#ifdef SSHDIST_CRYPT_DSA
extern const SshPkType ssh_pk_dl_modp;
extern const SshPkType ssh_pk_dl_modp_generator;
#endif /* SSHDIST_CRYPT_DSA */

I get an error “Variable has incomplete type” regarding all four:
ssh_pk_if_modn
ssh_pk_if_modn_generator
ssh_pk_if_modp
ssh_pk_if_modp_generator

How to solve the problem?

Tony.