首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一段代码提示函数找不到标识符解决思路

2012-04-11 
一段代码提示函数找不到标识符C/C++ code#include stdafx.h#includeiostreamusing namespace stdcons

一段代码提示函数找不到标识符

C/C++ code
#include "stdafx.h"#include<iostream>using namespace std;const int MAX_VALUE=100;        //设置最大路径长度const int MAX_VERTEX_NUM=20;   //最大顶点个数#define ture 1#define false 0typedef struct{        char *name;}VertexType;                    //顶点信息类型typedef struct{        int adj;        //char *info;}ArcCell;//AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{        VertexType vexs[MAX_VERTEX_NUM];        //顶点向量        ArcCell arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵        int vexnum,arcnum;                      //图的顶点数和弧数       // int kind;                               //图的种类标志}Graph;void swap(int &A,int &B){        int tmp=A;        A=B;        B=tmp;}int factorial(int n)                    //计算全排列{        int res=1;        res*=n--;        return res;}void dfs_gen_loop(Graph &G,int *goal)          //得到路径{        int total=0,sum=0;              //total为最终结果,sum为每次结果        int everytry[MAX_VERTEX_NUM];        for(int i=0;i<G.vexnum;++i)        {                everytry[i]=goal[i];//第一次传入的也是一种走法        }        [color=#FFFF00]total=CountLength(G.vexnum,everytry[MAX_VERTEX_NUM],G.arcs);[/color]        for(int i=1,p=0;i<factorial(G.vexnum);++i)        {        if(p==G.vexnum-1)                        p=0;                swap(everytry[p],everytry[p+1]);                [color=#FFCC00]sum=CountLength(G.vexnum,everytry[MAX_VERTEX_NUM],G.arcs);[/color]                if(sum<total)                {                        total=sum;                        for(int k=0;k<G.vexnum;++k)                        goal[k]=everytry[k];                }        sum=0;        ++p;        }}int CountLength(int n,int A[MAX_VERTEX_NUM],ArcCell  Vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM])   //计算路径长度{        int d=0;        for(int i=0;i<n;++i)                d+=Vexs[A[i]][A[(i+1)%n]].adj;        return d;}int LocateVex_M(Graph G,VertexType u)           //查找顶点位置不存在返回-1{        for(int i=0;i<G.vexnum;++i)                if(strcmp(u.name,G.vexs[i].name)==0)                        return i;        return -1;}void Add_Edge(Graph &G,VertexType v,VertexType w,int q) //添加边信息{        int i=-1,v1=LocateVex_M(G,v),w1=LocateVex_M(G,w);//判断是否含有相关信>息标志        if(LocateVex_M(G,v)<0 || LocateVex_M(G,w)<0)                return;        cout<<"请输入此弧或边的权值:";        cin>>G.arcs[v1][w1].adj;//       do{//                cout<<"是否有该弧(边)的相关信息(是:1 否:0):";//                cin>>i;//        }while(i!=1 && i!=0);//        if(i)//               {cout<<"请输入该弧(边)的信息(小于"<<MAX_INFO<<"个字符):";//                G.arcs[v1][w1].info=new char*[MAX_INFO];//                cin>>G.arcs[v1][w1].info;//                }        G.arcs[w1][v1]=G.arcs[v1][w1];        ++G.arcnum;                             //弧数+1}bool InitGraph(Graph &G){        cout<<"请输入要建立的图的顶点个数:";        cin>>G.vexnum;        for(int i=0;i<G.vexnum;++i)        {                cout<<"请输入顶点名字:";                cin>>G.vexs[i].name;        }//        cout<<"请输入图的种类标志:";//        cin>>G.kind;        G.arcnum=0;        //G.arcs=NULL;        //G.arcs=new ArcCell[G.vexnum][G.vexnum];        if(G.vexnum<MAX_VERTEX_NUM)    {                for(int i=0;i<G.vexnum;++i)                for(int j=0;j<G.vexnum;++j){                        G.arcs[i][j].adj=MAX_VALUE;                       //G.arcs[i][j].info=NULL;                        }                return ture;        }        return false;}int main(){        Graph G;        InitGraph(G);        int goal[MAX_VERTEX_NUM];        for(int i=0;i<G.vexnum;++i)                goal[i]=i;        Add_Edge(G,G.vexs[0],G.vexs[1],2);  //a-2->b        Add_Edge(G,G.vexs[0],G.vexs[2],5);  //a-5->c        Add_Edge(G,G.vexs[0],G.vexs[3],7);  //a-7->d        Add_Edge(G,G.vexs[1],G.vexs[2],8);  //b-8->c        Add_Edge(G,G.vexs[1],G.vexs[3],3);  //b-3->d        Add_Edge(G,G.vexs[2],G.vexs[3],1);  //c-1->d        dfs_gen_loop(G,goal);        cout<<"\n最短路径为:";        for(int i=0;i<G.vexnum;++i)                cout<<G.vexs[goal[i]].name<<"->";        cout<<G.vexs[goal[0]].name<<endl;        return 0;} 


错误为标色的句子,错误信息为1>e:\c++\siyi\siyi\siyi.cpp(47): error C3861: “CountLength”: 找不到标识符
1>e:\c++\siyi\siyi\siyi.cpp(53): error C3861: “CountLength”: 找不到标识符,求大哥大姐解救

[解决办法]
改了一下可以了,你看看注释。。
C/C++ code
#include<iostream>using namespace std;const int MAX_VALUE=100;        //设置最大路径长度const int MAX_VERTEX_NUM=20;   //最大顶点个数#define ture 1#define false 0typedef struct{    char *name;}VertexType;                    //顶点信息类型typedef struct{    int adj;    //char *info;}ArcCell;//AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{    VertexType vexs[MAX_VERTEX_NUM];               //顶点向量    ArcCell arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];  //邻接矩阵    int vexnum,arcnum;                      //图的顶点数和弧数    // int kind;                               //图的种类标志}Graph;// 要声明一下这个函数int CountLength(int n,int A[MAX_VERTEX_NUM],ArcCell  Vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]);void swap(int &A,int &B){    int tmp=A;    A=B;    B=tmp;}int factorial(int n)                    //计算全排列{    int res=1;    res*=n--;    return res;}void dfs_gen_loop(Graph &G,int *goal)          //得到路径{    int total=0,sum=0;                                   //total为最终结果,sum为每次结果    int everytry[MAX_VERTEX_NUM];    for(int i=0;i<G.vexnum;++i)    {        everytry[i]=goal[i];//第一次传入的也是一种走法    }    total=CountLength(G.vexnum, everytry, G.arcs); //everytry[MAX_VERTEX_NUM]数组只要传首地址就行了吧        for(int i=1,p=0;i<factorial(G.vexnum);++i)        {            if(p==G.vexnum-1)                p=0;            swap(everytry[p],everytry[p+1]);            sum=CountLength(G.vexnum, everytry, G.arcs);  ////everytry[MAX_VERTEX_NUM]数组只要传首地址就行了吧                if(sum<total)                {                    total=sum;                    for(int k=0;k<G.vexnum;++k)                        goal[k]=everytry[k];                }                sum=0;                ++p;        }        }int CountLength(int n, int A[MAX_VERTEX_NUM], ArcCell  Vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM])   //计算路径长度{    int d=0;    for(int i=0;i<n;++i)        d+=Vexs[A[i]][A[(i+1)%n]].adj;    return d;}int LocateVex_M(Graph G,VertexType u)           //查找顶点位置不存在返回-1{    for(int i=0;i<G.vexnum;++i)        if(strcmp(u.name,G.vexs[i].name)==0)            return i;        return -1;}void Add_Edge(Graph &G,VertexType v,VertexType w,int q) //添加边信息{    int i=-1,v1=LocateVex_M(G,v),w1=LocateVex_M(G,w);//判断是否含有相关信>息标志    if(LocateVex_M(G,v)<0 || LocateVex_M(G,w)<0)        return;    cout<<"请输入此弧或边的权值:";    cin>>G.arcs[v1][w1].adj;    //       do{    //                cout<<"是否有该弧(边)的相关信息(是:1 否:0):";    //                cin>>i;    //        }while(i!=1 && i!=0);    //        if(i)    //               {cout<<"请输入该弧(边)的信息(小于"<<MAX_INFO<<"个字符):";    //                G.arcs[v1][w1].info=new char*[MAX_INFO];    //                cin>>G.arcs[v1][w1].info;    //                }    G.arcs[w1][v1]=G.arcs[v1][w1];    ++G.arcnum;                             //弧数+1}bool InitGraph(Graph &G){    cout<<"请输入要建立的图的顶点个数:";    cin>>G.vexnum;    for(int i=0;i<G.vexnum;++i)    {        cout<<"请输入顶点名字:";        cin>>G.vexs[i].name;    }    //        cout<<"请输入图的种类标志:";    //        cin>>G.kind;    G.arcnum=0;    //G.arcs=NULL;    //G.arcs=new ArcCell[G.vexnum][G.vexnum];    if(G.vexnum<MAX_VERTEX_NUM)    {        for(int i=0;i<G.vexnum;++i)            for(int j=0;j<G.vexnum;++j){                G.arcs[i][j].adj=MAX_VALUE;                //G.arcs[i][j].info=NULL;            }            return ture;    }    return false;}int main(){    Graph G;    InitGraph(G);    int goal[MAX_VERTEX_NUM];    for(int i=0;i<G.vexnum;++i)        goal[i]=i;    Add_Edge(G,G.vexs[0],G.vexs[1],2);  //a-2->b    Add_Edge(G,G.vexs[0],G.vexs[2],5);  //a-5->c    Add_Edge(G,G.vexs[0],G.vexs[3],7);  //a-7->d    Add_Edge(G,G.vexs[1],G.vexs[2],8);  //b-8->c    Add_Edge(G,G.vexs[1],G.vexs[3],3);  //b-3->d    Add_Edge(G,G.vexs[2],G.vexs[3],1);  //c-1->d    dfs_gen_loop(G,goal);    cout<<"\n最短路径为:";    for(int i=0;i<G.vexnum;++i)        cout<<G.vexs[goal[i]].name<<"->";    cout<<G.vexs[goal[0]].name<<endl;    return 0;} 


[解决办法]

C/C++ code
int CountLength(int n,int A[MAX_VERTEX_NUM],ArcCell  Vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]);void dfs_gen_loop(Graph &G,int *goal)          //得到路径{        int total=0,sum=0;              //total为最终结果,sum为每次结果        int everytry[MAX_VERTEX_NUM];        for(int i=0;i<G.vexnum;++i)        {                everytry[i]=goal[i];//第一次传入的也是一种走法        }        total=CountLength(G.vexnum,everytry,G.arcs);        for(int i=1,p=0;i<factorial(G.vexnum);++i)        {        if(p==G.vexnum-1)                        p=0;                swap(everytry[p],everytry[p+1]);                sum=CountLength(G.vexnum,everytry,G.arcs);                if(sum<total)                {                        total=sum;                        for(int k=0;k<G.vexnum;++k)                        goal[k]=everytry[k];                }        sum=0;        ++p;        }}
[解决办法]
参数传入错误、

[解决办法]
我这边是运行能过了的,你加下#include "stdafx.h"这个头文件试试,我是在VC6.0下所以去掉了,你加一下试试。。
探讨
引用:

我改的那个,还有什么错误?
引用:
引用:

参数传入错误、
那怎么改呢?
不是,是访问位置出错,语法上没什么问题,但是在运行时出错了

热点排行