| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 729 人关注过本帖
标题:这个typedef 哪里错了。。。
只看楼主 加入收藏
尝鲜
Rank: 2
等 级:论坛游民
帖 子:24
专家分:12
注 册:2010-10-21
结帖率:100%
收藏
已结贴  问题点数:0 回复次数:7 
这个typedef 哪里错了。。。
typedef template<class T> void (*Ini)(T&,const T&=T());
就是弄一个函数模板的指针 不知道怎么就错了帮忙改一下啊。。。。
搜索更多相关主题的帖子: typedef 
2010-12-13 21:45
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:3 
程序代码:
#include<iostream.h>
template<class T>
typedef void (*Ini)(T&,const T&);
void main()
{
    cout<<"123"<<endl;
}
这样就对了  格式书写问题  把template放在上面

                                         
===========深入<----------------->浅出============
2010-12-14 15:42
尝鲜
Rank: 2
等 级:论坛游民
帖 子:24
专家分:12
注 册:2010-10-21
收藏
得分:0 
回复 2楼 laoyang103
不行的。。。看看、、
#include<iostream>
using namespace std;
template<class T>
typedef void (*Ini)(T&,const T&);
void aa(int &d,const int &v)
{
    d=v;
}
void main()
{
    cout<<"123"<<endl;
    int i=0;
    cout<<"i= "<<i<<endl;
    Ini ini;
    ini=aa;
    ini(i,3);
    cout<<"i= "<<i<<endl;
}
2010-12-14 16:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
typedef 不能用于模版。
2010-12-14 18:18
尝鲜
Rank: 2
等 级:论坛游民
帖 子:24
专家分:12
注 册:2010-10-21
收藏
得分:0 
这个算了。。我在类模板里用。。。。下面是个杯具了。。。。
//main.cpp>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include <iostream>
#include "Mem.h"
using namespace std;
void aa(int &d)
{
    d=4;
}
void bb(int &d)
{
    static int i=1;
    d=i;
    i++;
}
void print(int *ptr,int N)
{
    for(int i=0;i<N;i++)
        cout<<"ptr["<<i<<"]= "<<ptr[i]<<endl;
}
int main()
{
    const int N=4;
    int *ptr=Mynew<int,N>(7);
    print(ptr,N);
    Mydelete(ptr);
    return 0;
}
//Mem.h>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#ifndef MEM_H
#define MEM_H
#include <cstdlib>
#include "Test.h"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#if 0
template<class T,int N>
T* Mynew(typename Test<T>::Fun init)
{
    T* tmp=static_cast<T*>(malloc(sizeof(T)*N));
    if(tmp)
    {
        Test<T> ft(init);
        for(int i=1;i<=N;i++)
            ft.Run(tmp[i-1]);
    }
    return tmp;
}
#endif
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#if 1
template<class T,int N>
T* Mynew(const T &v=T())
{
    T* tmp=static_cast<T*>(malloc(sizeof(T)*N));
    if(tmp)
        for(int i=1;i<=N;i++)
            tmp[i-1]=v;   
    return tmp;
}
#endif
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#if 1
template<class T>
void Mydelete(T *&p)
{
    p->T::~T();
    free(p);
    p=0;
}
#endif
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#endif
//Test.h>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#ifndef TEST_H
#define TEST_H
template<class T>
class Test
{
public:
    typedef void (*Fun)(T&);
    explicit Test( Fun fun=0){Setfun(fun);}
    virtual ~Test(){}
    void Setfun(Fun fun){function=fun;}
    void Run(T &d){(*function)(d);}
private:   
    Fun function;
};
#endif
>>******************************************************
1:在Mem中的第一个函数模板不编译,第二个函数模板编译的时候可以的
2:在Mem中的第一个函数模板编译,第二个函数模板不编译的时候就杯具了
3:在Mem中的第一个函数模板编译,第二个函数模板编译的时候就更杯具了。。。
4: Mem中的第一个函数模板要调用到的函数在main.cpp中。。。就是 aa,bb
大家在自己的机子上试试,帮忙找找错误。。。
2010-12-14 18:49
迷失的木桶
Rank: 4
等 级:业余侠客
帖 子:52
专家分:230
注 册:2010-5-29
收藏
得分:3 
用仿函数方式构建,基本上可以解决你的问题。。。
2010-12-14 19:09
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
不要这样用  pangding大侠说的对   我调了很长时间   编译不过去的
程序代码:
#include<iostream>
using namespace std;
template<class T>
typedef void (*Ini)(T *d,T *v);
template<class T>
void aa(T *d,T *v)
{
    ;
}
void main()
{
    cout<<"123"<<endl;
    int i=0,j=3;
    cout<<"i= "<<i<<endl;
    Ini ini;
    ini=aa;
    aa(&i,&j);
    cout<<"i= "<<i<<endl;
}

你的aa函数里面只要一写东西  肯定报错

                                         
===========深入<----------------->浅出============
2010-12-14 21:51
尝鲜
Rank: 2
等 级:论坛游民
帖 子:24
专家分:12
注 册:2010-10-21
收藏
得分:0 
杯具啊。。。。。。。。
下面的附件是个杯具的简化。。。
main.zip (96.09 KB)

。。等待啊
2010-12-14 22:39
快速回复:这个typedef 哪里错了。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013026 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved