会C++的大哥麻烦近来看下 ~~小小的问题:)
从网上找了一个playfair程序 但是运行一直出现一个定义类错误  自己改不了  会的帮忙改下 谢谢拉~程序如下:

#include <iostream>
#include<stdlib.h>
using namespace std;

#define MAX 1000  //明文空间最大字符数

int main()
{
FILE *fp;
int i=0;
char a[MAX],b[MAX],k[10];  //数组a存放明文字符,数组b存放密文字符,数组k存放密钥字符
fp=fopen("plaintext.txt","r");

//将plaintext.txt中的明文读入明文数组a
do
{
  char ch=NULL;
  fscanf(fp,"%c",&ch);  //数组a存放明文字符
  if(ch!=' ')  //滤除输入中的空格
  a[i++]=ch;
}
while(i<MAX&&a[i-1]!='\n');
static int q=i;  //q为回车位,明文共q-1个字符

//提示可能的明文空间溢出
if(q-1>=1900)
  cout<<"May be overflow..."<<endl;

//将明文中的字符j换为i
for(i=0;i<q-1;i++)
{
  if(a=='j')
  a='i';
}

//将plaintext中的密钥读入密钥数组k
i=0;
do
{
  fscanf(fp,"%c",&k[i++]);
}
while(i<10&&k[i-1]!='\n');
int p=i-1;  //共p位密钥

//将密钥中的字符j换为i
for(i=0;i<p;i++)
{
  if(k=='j')
  k='i';
}

//删掉密钥中重复的字符
for(i=1;i<p;i++)
  for(int j=0;j<i;j++)
  if(k==k[j])
  {
    for(int l=i;l<p-1;l++)
    k[l]=k[l+1];
    p--;
  }

char m[5][5];  //密钥矩阵
char m1[25];  //暂存密钥矩阵元素的辅助数组

//将密钥元素填入数组m1
for(i=0;i<p;i++)
  m1=k;

//将密钥后的其它字母补入数组m1
for(i=p;i<25;i++)
  for(int h=97;h<=122;h++)
  {
  if(h==106)  //////////不要字符j//////////////////
    continue;
  int is=1;  //判断后补入m1的元素是否和密钥重复
  for(int e=0;e<i;e++)
  {
    if(m1[e]==char(h))
    {
    is=0;
    break;  //break只能跳for和while循环
    }
  }
  if(is)
  { 
    m1=char(h); 
    break;
  }
  }

//将数组m1的元素赋给矩阵m
int j,l;      //i为矩阵行标,j为列标,l指m1数组位标
for(i=0;i<5;i++)    
  for(j=0,l=i*5;j<5,l<(i+1)*5;j++,l++)
  m[j]=m1[l]; 

//在明文连续相同字符间插入字符x      
int ix=0; //判断是否需要插x
int nx=0; //计算插入x的个数
for(i=0;i<q/2;i++)
{
  if(ix) 
  {
  i=0;  //如果插过x,数组奇偶排列已打乱,需重新处理
  ix=0;
  }
  if(a[i*2]==a[i*2+1]) 
  {
  for(j=q-1;j>=i*2+1;j--)
    a[j]=a[j-1];
  a[i*2+1]='x';
  nx++;
  ix=1;
  }
}

//如果明文总长为奇数,在后面再补一个x
if((q-1+nx)%2!=0)
{
  a[q-1+nx]='x';  
  nx++;    //现明文总长为q-1+nx,且为偶数
}

//利用playfair密钥矩阵,将明文空间映射到密文空间
int r1=5,l1=5;  //r和l分别为矩阵m的行标和列标
int r2=5,l2=5;
for(int g=0;g<(q-1+nx)/2;g++)  //g为数组a和b的行标
{
  for(i=0;i<5;i++)
  for(j=0;j<5;j++)
  {
    if(a[g*2]==m[j])
    {
    r1=i;
    l1=j;
    }
    if(a[g*2+1]==m[j])
    {
    r2=i;
    l2=j;
    }
  }
  if(r1==r2)  //在同一行
  {
  b[g*2]=m[r1][(l1+1)%5];
  b[g*2+1]=m[r2][(l2+1)%5];
  }
  else if(l1==l2)  //在同一列
  {
  b[g*2]=m[(r1+1)%5][l1];
  b[g*2+1]=m[(r2+1)%5][l2];
  }
  else if(l1<l2)  
  {
  b[g*2]=m[r1][l2];
  b[g*2+1]=m[r2][l1];
  }
  else
  {
  b[g*2]=m[r2][l1];
  b[g*2+1]=m[r1][l2]; 
  }
}

//输出密文到ciphertext.txt
FILE* fo=fopen("ciphertext.txt","w");
for(g=0;g<q-1+nx;g++)
  fprintf(fo,"%c",b[g]);
fprintf(fo,"\n");
fclose(fp);
fclose(fo);
  return 0;
}[em17]