CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一菜鸟的送分问题: 高手指教

楼主liguang1981(少侠)2003-02-01 19:20:41 在 C/C++ / C语言 提问

 
  一程序  
  vc6中文件结构如下  
  workspace   "list"  
      list   files  
            source   files  
                  list.cpp  
                  list_2.cpp  
            header   files  
                    list.h  
                     
  list_2.cpp为    
  #include   "list.h"  
  #include   <iostream>  
  using   namespace   std;  
  void   main()  
  {     Ilist   mylist;  
        for(int   xi=0;xi<10;xi++)  
        {   mylist.insert_front(xi);  
                mylist.insert_end(xi);  
        }  
        mylist.display();  
  }  
  insert_front   是list   类的成员函数  
   
  在vc6中连接失败  
  list_2.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   void   __thiscall   Ilist::insert_end(int)"   (?insert_end@Ilist@@QAEXH@Z)  
  list_2.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   void   __thiscall   Ilist::insert_front(int)"   (?insert_front@Ilist@@QAEXH@Z)  
  list_2.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   __thiscall   Ilist::Ilist(void)"   (??0Ilist@@QAE@XZ)  
  Debug/list.exe   :   fatal   error   LNK1120:   3   unresolved   externals  
   
  把main   放到   list.cpp中便成功了  
  为什么? 问题点数:50、回复次数:16Top

1 楼zhaozhencn(FlyingDonkey)回复于 2003-02-01 20:30:29 得分 5

是不是在你的list.cpp   和list_2.cpp中都定义了main函数。。Top

2 楼micropentium6(小笨|曾经的美好)回复于 2003-02-01 20:39:43 得分 5

是你的头文件重复include了吧?:)  
  你没有使用包含保护吧?  
  头文件是只能加载一回的。Top

3 楼liguang1981(少侠)回复于 2003-02-01 21:50:20 得分 0

list.cpp是对成员函数的定义  
  当然要有#include   "list.h"  
   
  ""是不是在你的list.cpp   和list_2.cpp中都定义了main函数。。""  
  当然没有  
   
  ""你没有使用包含保护吧?""  
  包含保护   是什么?  
   
   
  Top

4 楼qhgary(Gary)回复于 2003-02-02 18:27:37 得分 5

包含保护:  
          比如:  
                list.h  
  在前面加上       #ifndef   LIST_H  
                            #define   LIST_H  
  在文件末尾加上  
                            #endif  
  这样就可以互相包含了,编译器会自动判断,如果没有包含就包含,如果包含了,就不再包含。避免重复包含文件。Top

5 楼HongHuer(Hello,world.)回复于 2003-02-02 19:33:40 得分 5

1   Ilist::insert_end(int)       这个函数的函数体写了吗?  
  2   Ilist::insert_front(int)这个函数的函数体写了吗?  
  3   Ilist::Ilist(void)               这个函数的函数体写了吗?  
   
  如果上面的函数写了,象你这样写,应该没有错的。  
   
  list_2.cpp为    
  #include   "list.h"  
  #include   <iostream>  
  using   namespace   std;  
  void   main()  
  {     Ilist   mylist;  
        for(int   xi=0;xi<10;xi++)  
        {   mylist.insert_front(xi);  
                mylist.insert_end(xi);  
        }  
        mylist.display();  
  }  
  Top

6 楼micropentium6(小笨|曾经的美好)回复于 2003-02-02 22:46:23 得分 5

如果你的一个头文件#include   "list.h"在两个cpp文件中,那么肯定是有问题的!相应的处理方法称为include   guard,包含守卫,shining已经给你解释了:)Top

7 楼liguang1981(少侠)回复于 2003-02-03 12:48:47 得分 0

首先谢谢大家的帮助  
      我做了如下修改            
  list.h                                      
    加上   #ifndef   LIST_H  
        #define   LIST_H  
          //list.h   的内容  
        #endif  
         
  list.cpp  
  中  
  #include   "list.h"  
  #include   <iostream>  
  using   namespace   std;  
   
  list_2.cpp  
  中  
  #include   "list.h"  
  #include   <iostream>  
  using   namespace   std;  
   
  这样对不对?  
  怎么连接还是不通过  
  请告知具体应怎么做  
  谢谢  
  Top

8 楼huanshilang(幻十郎)回复于 2003-02-03 13:02:21 得分 0

学习   学习Top

9 楼HongHuer(Hello,world.)回复于 2003-02-03 13:30:14 得分 0

这样对不对?  
  怎么连接还是不通过  
  请告知具体应怎么做  
  谢谢  
   
  >>  
  对。  
   
  你的头文件写好了没有,函数体写了没有?  
   
  连接通不过,怎样通不过?  
  说编译的错误。  
   
  怎么这么简单的问题还要搞这么久?  
  把问题说清楚。Top

10 楼liguang1981(少侠)回复于 2003-02-03 19:05:18 得分 0

麻烦大家了,再看一下吧  
  Top

11 楼liguang1981(少侠)回复于 2003-02-03 19:06:17 得分 0

list.h内容  
  #ifndef   LIST_H  
  #define   LIST_H  
  class   Ilist_item;  
  class   Ilist  
  {   public:  
          Ilist();  
          void   insert(Ilist_item   *p,int   value);  
  void   insert_front(int   value);  
  void   insert_end(int     value);  
  void   add_size();  
          void   down_size();  
  Ilist_item   *find(int);  
          void   display();  
  private:  
          Ilist_item   *at_front;  
          Ilist_item   *at_end;  
  int   _size;  
  };  
  class   Ilist_item  
  {   public:  
            Ilist_item(int   value,Ilist_item   *p=0);  
          Ilist_item   *next(Ilist_item   *link=0);  
    int   value(){return   _value;}  
   
      private:  
          int   _value;  
  Ilist_item   *_next;  
  };  
  #endifTop

12 楼liguang1981(少侠)回复于 2003-02-03 19:09:23 得分 0

list.cpp内容  
  #include   "list.h"  
  #include   <iostream>  
  using   namespace   std;  
   
  inline   Ilist::Ilist():at_front(0),at_end(0),_size(0)  
  {}  
  inline   void   Ilist::insert(Ilist_item   *p,int   value)  
  {     if(p)     {  
                        new   Ilist_item(value,p);  
                        add_size();}  
  else  
  insert_front(value);  
  }  
  inline   void   Ilist::add_size()  
  {   _size++;}  
  inline   void   Ilist::down_size()  
  {_size--;}  
   
   
  inline   void   Ilist::insert_front(int   value)  
  {     Ilist_item   *p=new   Ilist_item(value);  
          if(!at_front)  
  at_front=at_end=p;  
    else  
    {   at_front=p->next(at_front);  
                  at_front=p;  
    }  
  add_size();  
  }Top

13 楼prf8(机关报)回复于 2003-02-04 00:29:34 得分 15

我试了一下,通过了,主要是你的定义和实现不同造成的.  
  而且,构造函数好象不能用内联,你应去掉inline;  
  另外,你在何处定义的Ilist_item的实现也包含进你的list_2.cpp,  
  最后,再检查一遍你的声明和你的定义是否完全一致,我想就没有问题了.都是你粗心惹的祸.Top

14 楼HongHuer(Hello,world.)回复于 2003-02-04 11:05:15 得分 10

初步看了一下:  
   
  你在头文件怎么申明的函数,就应该在原文件中怎么定义。  
  (每个所申明的函数都应该有函数体)  
  类型不一致,就会有你上面的编译错误。  
   
  有的函数没有函数体。  
   
  最大的问题就是这点。  
  Top

15 楼liguang1981(少侠)回复于 2003-02-05 17:20:27 得分 0

对了,谢谢!  
  麻烦大家了!  
  Top

16 楼liguang1981(少侠)回复于 2003-02-05 17:27:04 得分 0

我把   inline     void     Ilist::insert_front(int     value)        
              inline   void   Ilist::insert_end(int   value)  
        的inline去掉就对了  
        谢谢大家!  
  Top

相关问题

  • 菜鸟送分
  • 菜鸟送分!!!!!!!!!!!!!!!!!!!!!!!!
  • 菜鸟送分!!!!
  • 菜鸟送分!
  • 菜鸟送分
  • 菜鸟送分
  • 菜鸟送分
  • 菜鸟来送分。
  • 菜鸟送分题?
  • 菜鸟送分:CObject

关键词

  • 函数
  • cpp
  • 文件
  • 连接
  • ilist
  • front
  • inline
  • 定义
  • xi
  • item

得分解答快速导航

  • 帖主:liguang1981
  • zhaozhencn
  • micropentium6
  • qhgary
  • HongHuer
  • micropentium6
  • prf8
  • HongHuer

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo