我的代码这么写的:
在.h文件中
#include "Afxtempl.h"
typedef struct _PER_IO_CONTEXT
{
_PER_IO_CONTEXT* curaddr;
_PER_IO_CONTEXT*           pNext; 
CHAR sID[24];
int operator == (PPER_IO_CONTEXT right) //重载"=="符号
   {
       if(strcmp(sID,right->sID)==0) return 1;
       return 0;       
   }}*PPER_IO_CONTEXT;
class CModel
{
   CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT*> m_lpConnectionList;
   CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT*> m_lpIoLookasideList;
}结果rebuild的结果有400多个error,全是下面两种error:
c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(51) : error C2894: templates cannot be declared to have 'C' linkage
c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(134) : error C2733: second C linkage of overloaded function 'ConstructElements' not allowed
还有一个
BSCMAKE: error BK1506 : cannot open file '.\Debug\GPRS服务器.sbr': No such file or directory我是不是有哪里的头文件加错了.或者设置有问题呢?
请各位大侠帮我!

解决方案 »

  1.   

    error C2894: templates cannot be declared to have 'C' linkage
    =============
    你看到这个没有??
      

  2.   

    应该是#include <afxtempl.h>。
    将“GPRS服务器.sbr”文件拷贝到Debug文件夹下。
      

  3.   

    CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT*> m_lpConnectionList; -----------------------------------------------
    定义不对. 存储类型跟操作类型不一致:要么都用 对象,要么都用指针:
    CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT&> m_lpConnectionList; 
    或者:
    CList<PPER_IO_CONTEXT*,PPER_IO_CONTEXT*> m_lpConnectionList; 
      

  4.   

    不差头文件,
    -------------
    CList<MYTYPE,MYTYPE&> myList;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_clist.asp
      

  5.   

    多谢大侠们的指教,我现在改了代码了.krh2001(边城浪子) 说的地方我改了,还把#include "Afxtempl.h"加进了所有相关的.h文件中,还是有问题:
    typedef struct _PER_IO_CONTEXT
    {
    _PER_IO_CONTEXT* curaddr;
    _PER_IO_CONTEXT*           pNext; 
    CHAR sID[24];
    int operator == (PPER_IO_CONTEXT right) //重载"=="符号
       {
           if(strcmp(sID,right->sID)==0) return 1;
           return 0;       
       }}*PPER_IO_CONTEXT;
    class CModel
    {
       CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT&> m_lpConnectionList;
       CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT&> m_lpIoLookasideList;
    }
    现在的error少了些,不过下面三个error一起重复出现了三次
    g:\完成端口\clist\iomodel.h(119) : error C2061: syntax error : identifier 'PPER_IO_CONTEXT'
    g:\完成端口\clist\iomodel.h(120) : error C2805: binary 'operator ==' has too few parameters
    g:\完成端口\clist\iomodel.h(120) : error C2333: '==' : error in function declaration; skipping function body
    好象都是跟struct定义里面重载"=="符号那几句相关的.那几句写错了吗?应该怎么写才对呀?
    还有顺便问一下,如果clist里面的对象不需要比较的话可不可以不重载==符号?
    还有我的PPER_IO_CONTEXT本身就是指针型的变量, 
    CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT&> m_lpConnectionList;
    第二个参数也要用&吗?
    请大侠的都来帮我!
      

  6.   

    typedef struct _PER_IO_CONTEXT
    {
    _PER_IO_CONTEXT* curaddr;
    _PER_IO_CONTEXT*           pNext; 
    CHAR sID[24];
    int operator == ( _PER_IO_CONTEXT *right) //重载"=="符号
       {
           if(strcmp(sID,right->sID)==0) return 1;
           return 0;       
       }}*PPER_IO_CONTEXT;
    class CModel
    {
       CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT&> m_lpConnectionList;
       CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT&> m_lpIoLookasideList;
    };
    这样定义以后就没有错误了.
      

  7.   

    不过我觉得你的运算符重载逻辑上有点错误,你重载后你的运算符是将一个对象和一个指针进行比较了,这样好像不合逻辑.应该是对象和对象进行比较吧.以下代码不知道是不是你想要的:
    typedef struct _PER_IO_CONTEXT
    {
    _PER_IO_CONTEXT* curaddr;
    _PER_IO_CONTEXT*           pNext; 
    CHAR sID[24];
    int operator == ( _PER_IO_CONTEXT right) //重载"=="符号
       {
           if(strcmp(sID,right.sID)==0) return 1;
           return 0;       
       }}*PPER_IO_CONTEXT;
    class CModel
    {
       CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT&> m_lpConnectionList;
       CList<PPER_IO_CONTEXT,PPER_IO_CONTEXT&> m_lpIoLookasideList;
    };
      

  8.   

    按照MSDN中CList的说明以及我对你的意思的理解,如果你只是想运用运算符(==)重载的话,我个人以为以下代码能满足你的要求:
    typedef struct _PER_IO_CONTEXT
    {
    _PER_IO_CONTEXT* curaddr;
    _PER_IO_CONTEXT*           pNext; 
    CHAR sID[24];
    int operator == ( _PER_IO_CONTEXT right) //重载"=="符号
       {
           if(strcmp(sID,right.sID)==0) return 1;
           return 0;       
       }}*PPER_IO_CONTEXT;
    class CModel
    {
       CList<_PER_IO_CONTEXT,_PER_IO_CONTEXT> m_lpConnectionList;
       CList<_PER_IO_CONTEXT,_PER_IO_CONTEXT> m_lpIoLookasideList;
    };
      

  9.   

    6月,一个价值1000元的帖子即将诞生!时代重英豪,网络教尔曹,万般皆下品,唯有发帖高!
    我是有名的水王,可到处遭到版主封杀,网络之大竟无一块版面让俺痛快一灌,发帖还能拿奖?俺倒是曾经梦见过。
    我喜欢跟大家分享,好文章,好资源……。有人喜欢,我已经很开心,转载也有奖金?真是从来没见过。现金大奖:
    一等奖(一名):现金1000元
    二等奖(一名):现金500元
    三等奖(一名):现金300元
    优秀奖(7名):现金100元

    你没听说过、没见过、认为不可能的,今天统统推翻!上Kman论坛(http://www.kman.com.cn/kmanforum/forum/index),你的发帖够精彩,回帖的人够多,1000元就是你的!!
      

  10.   

    typedef struct _PER_IO_CONTEXT
    {
    _PER_IO_CONTEXT* curaddr;
    _PER_IO_CONTEXT*           pNext; 
    CHAR sID[24];
    int operator == ( _PER_IO_CONTEXT right) //重载"=="符号
       {
           if(strcmp(sID,right.sID)==0) return 1;
           return 0;       
       }}*PPER_IO_CONTEXT;
    class CModel
    {
       CList<_PER_IO_CONTEXT,_PER_IO_CONTEXT> m_lpConnectionList;
       CList<_PER_IO_CONTEXT,_PER_IO_CONTEXT> m_lpIoLookasideList;
    };
    CList模板中第二个参数的类型要和运算符重载函数中参数的类型一致.
      

  11.   

    typedef struct _PER_IO_CONTEXT
    {
    _PER_IO_CONTEXT* curaddr;
    _PER_IO_CONTEXT*           pNext; 
    CHAR sID[24];
    int operator == ( _PER_IO_CONTEXT &right) //重载"=="符号
       {
           if(strcmp(sID,right.sID)==0) return 1;
           return 0;       
       }}*PPER_IO_CONTEXT;
    class CModel
    {
       CList<_PER_IO_CONTEXT,_PER_IO_CONTEXT&> m_lpConnectionList;
       CList<_PER_IO_CONTEXT,_PER_IO_CONTEXT&> m_lpIoLookasideList;
    };
    CList模板中第二个参数的类型要和运算符重载函数中参数的类型一致.
      

  12.   

    wolfzxq(红尘虚梦):
        我的CList中的第二个参数定义的PPER_IO_CONTEXT,指针型的,所以我在重载运算符的时候定义的right也是PPER_IO_CONTEXT型。这样应该没什么问题吧?
        我那些error到底是怎么回事呀?大家帮我看看吧!
      

  13.   

    我想你的错误是因为(猜测的)用TYPEDEF定义的PPER_IO_CONTEXT在结构体中不可见,或者不能够在结构体内使用.如果使用指针的话,也可以这样定义:
    typedef struct _PER_IO_CONTEXT
    {
        _PER_IO_CONTEXT* curaddr;
        _PER_IO_CONTEXT*           pNext; 
        CHAR sID[24];
        int operator == ( _PER_IO_CONTEXT *right) //重载"=="符号
       {
           if(strcmp(sID,right->sID)==0) return 1;
           return 0;       
       }}*PPER_IO_CONTEXT;
    class CModel
    {
       CList<_PER_IO_CONTEXT,_PER_IO_CONTEXT*> m_lpConnectionList;
       CList<_PER_IO_CONTEXT,_PER_IO_CONTEXT*> m_lpIoLookasideList;
    };