首页
社区
课程
招聘
[求助]问一个超级简单的问题,关于C++头文件
2009-2-8 08:21 4039

[求助]问一个超级简单的问题,关于C++头文件

2009-2-8 08:21
4039
自己写的程序哪些内容应该放头文件,哪些放*.cpp文件

我在书上没有找到相关的介绍,网络上搜索找C++头文件出来的基本全是对C++/C标准库头文件的介绍

1>d:\visual studio 2008\projects\cpp_002\cpp_002\array.h(48) : error C2955: “Array”: 使用类 模板 需要 模板 参数列表

我自己写的类,用模板,编译一直出来这个问题,不知道应该如何解决

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
perrych 2009-2-8 09:04
2
0
array.h

template <class elemType>

class Array {
public:
        explicit Array( int size = DefaultArraySize );
        Array( elemType *array, int array_size );
        Array( const Array &rhs );
        virtual ~Array() { delete [] ia; }
        bool operator==( const Array& ) const;
        bool operator!=( const Array& ) const;
        Array& operator=( const Array& );
        int size() const { return _size; }
        virtual elemType& operator[](int index) { return ia[index]; }
        virtual void sort();
        virtual elemType min() const;
        virtual elemType max() const;
        virtual int find( elemType value ) const;
protected:
        static const int DefaultArraySize = 12;
        int _size;
        elemType *ia;
};

array.cpp
#include "stdafx.h"
#include "Array.h"
#include <iostream>
using namespace std;

Array::Array( int sz)
{
        _size = sz;
        ia = new elemType[ _size ];
        for ( int ix=0; ix < _size; ++ix )
        ia[ ix ] = 0;
}

Array::Array( elemType *array, int sz )
{
        _size = sz;
        ia = new elemType[ _size ];
        for ( int ix=0; ix < _size; ++ix )
        ia[ix ] = array[ ix ];
}

Array::Array( const Array &rhs )
{
        _size = rhs._size;
        ia = new elemType[ _size ];
        for (int ix = 0; ix < _size; ix++ )
        ia[ ix ] = rhs.ia[ ix ];
}

int _tmain(int argc, _TCHAR* argv[])
{
        const int array_size = 4;
        Array<int> ia(array_size);
        Array<double> da(array_size);
        Array<char> ca(array_size);
        int ix;
        for ( ix = 0; ix < array_size; ++ix ) {
        ia[ix] = ix;
        da[ix] = ix * 1.75;
        ca[ix] = ix + 'a';
        }
        for ( ix = 0; ix < array_size; ++ix )
        cout << "[ " << ix << " ] ia: " << ia[ix]
        << "\tca: " << ca[ix]
        << "\tda: " << da[ix] << endl;
        return 0;
}
雪    币: 247
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
安摧 2 2009-2-8 09:17
3
0
适当参考这个文档中的部分内容吧,,,一句话说不完

高质量编程指南_林锐.pdf

仅供参考
上传的附件:
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
perrych 2009-2-8 09:44
4
0
刚才看了参考文档,似乎这些还不是我现在最关心的

我现在不知道自己写一段code,哪些代码应该放头文件,哪些代码应该放代码文件。
还是就是我用了模板,发现我的程序根本通不过编译,也不知道错误在哪里。我现在只是希望能解决这些最基本问题,可以一边看书上的代码效果一边学习!
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
perrych 2009-2-8 11:31
5
0
花了4个小时比较人家的源码才发现原来
template<class TYPE> Array<TYPE>::Array( int sz)
这个格式才是正确的
雪    币: 207
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ztd 1 2009-2-8 19:59
6
0
了解一下什么是函数声明和定义就知道哪里该放什么了。
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
whtyy 1 2009-2-9 10:53
7
0
对于一个功能模块(包含一个或者多个.C/.CPP),应该有一个对应的接口头文件,导出的此接口相关的函数声明/类型定义

如果功能模块包含有多个源码文件(.C/.CPP),那么可以把模块内部的公共库函数或者公共的类型定义放在一个头文件中(模块内部的头文件)

VS的模板类不支持声明和实现的分离,所以模板类的实现代码必须放在头文件中
游客
登录 | 注册 方可回帖
返回