请帮忙看看代码有什么问题

MutouMajia 2009-06-15 11:09:31

#ifndef MGRAPH_H_INCLUDED
#define MGRAPH_H_INCLUDED

template <class T>

class Graph
{
public:
virtual int Insert(int u, int v, T& w) = 0;
virtual int Remove(int u, int v) = 0;
virtual bool Exist(int u, int v) const = 0;

protected:
int n; // 顶点数
int e; // 边数
};

template <class T>
class MGraph : public Graph<T>
{
public:
MGraph(int mSize, const T& noedg);
~MGraph();

int Insert(int u, int v, T& w);
int Remove(int u, int v);
bool Exist(int u, int v) const;

protected:
T ** a;
T ** noEdge;
};


template <class T>
MGraph<T>::MGraph(int mSize, const T& noedg)
{
n = mSize;
e = 0;
noEdge = noedg;
a = new T* [n];

for (int i = 0; i < n; i++)
{
a[i] = new T[n];
for (int j = 0; j < n; j++)
{
a[i][j] = noEdge;
}
a[i][i] = 0;
}
}


template <class T>
MGraph<T>::~MGrpah()
{
for (int i = 0; i < n; i++)
{
delete [] a[i];
delete [] a;
}
}

template <class T>
bool MGraph<T>::Exist(int u, int v) const
{
if ( u < 0 || v < 0 || u > n - 1 || v > n - 1 || u == v || a[u][v] == noEdge)
return false;
return true;
}

template <class T>
int MGraph<T>::Insert(int u, int v, T& w)
{
if ( u < 0 || v < 0 || u > n - 1 || v > n - 1 || u == v )
return -1;
if (a[u][v] != noEdge)
return 0;

a[u][v] = w;
e ++;
return 1;
}

template <class T>
int MGraph<T>::Remove(int u, int v)
{
if ( u < 0 || v < 0 || u > n - 1 || v > n - 1 || u == v )
return -1;
if (a[u][v] == noEdge)
return 0;

a[u][v] = noEdge;
e --;
return 1;
}


#endif // MGRAPH_H_INCLUDED




为什么在MGraph的构造函数里使用基类成员n时,
IDE报错说:n没有定义呢???
...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
josephwuxiaameng 2009-06-15
  • 打赏
  • 举报
回复
似乎还有别的问题吧?
error C2523: 'MGraph<T>::~MGrpah' : destructor tag mismatch
老邓 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 MutouMajia 的回复:]
呵呵,恩,用的是GCC,呵呵,谢谢!
标准C++中规定要一定要加Graph <T>::前缀吗?
[/Quote]
是的。
GCC完全按标准来,VC增强了易用性。
MutouMajia 2009-06-15
  • 打赏
  • 举报
回复
呵呵,恩,用的是GCC,呵呵,谢谢!
标准C++中规定要一定要加Graph<T>::前缀吗?
老邓 2009-06-15
  • 打赏
  • 举报
回复
或使用:
using Graph<T>::n;
把上面这句放在MGraph的定义内。

这样,就不用每次都这样了。
老邓 2009-06-15
  • 打赏
  • 举报
回复
你用的是GCC,语法检查比VC严格。
老邓 2009-06-15
  • 打赏
  • 举报
回复
这样访问:
Graph<T>::n

64,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧