gcc中编译模版类继承的问题

lite_one 2006-12-27 03:15:59
首先:
Using built-in specs.
Target: i686-pc-cygwin
Thread model: posix
gcc version 4.1.0

对于下面的代码(库函数和程序所依赖的类定义都正确):
---------------------------------------------------------

template <class Graph>
class SEARCH
{
public:
SEARCH(const Graph &g):g(g), ord(g.V(), -1), cnt(0)
{
}
int operator [](int v) const
{
return ord[v];
}
protected:
virtual void searchC(Edge e) = 0;
void search()
{
for(int v = 0; v < g.V(); ++v)
{
if(-1 == ord[v]) searchC(Edge(v, v));
}
}
const Graph &g;
vector <int> ord;

int cnt;
};

template <class Graph>
class DFS : public SEARCH<Graph>
{
public:
DFS(const Graph &g):SEARCH<Graph>(g), st(g.V(), -1)
{
search();
}
int ST(int v) const
{
return st[v];
}
private:
virtual void searchC(Edge e)
{
int v = e.v, w = e.w;
ord[w] = cnt++;
st[w] = v;
typename Graph::adjIterator iters(g, w);
for(int n = iters.beg(); !iters.end(); n = iters.nxt())
{
if(-1 == ord[n]) searchC(Edge(w, n));
}
}
vector <int> st;
};
---------------------------------------------------------
用命令
$ g++41 -g main.cpp -o graph
得到一下编译错误提示:
-------------------------------------
search.h: In constructor 'DFS<Graph>::DFS(const Graph&)':
search.h:83: error: no matching function for call to 'search()'
search.h: In member function 'virtual void DFS<Graph>::searchC(Edge)':
search.h:93: error: 'ord' was not declared in this scope
search.h:93: error: 'cnt' was not declared in this scope
search.h:95: error: 'g' was not declared in this scope
search.h: In constructor 'DFS<Graph>::DFS(const Graph&) [with Graph = sparseGraph]':
search_test.h:38: instantiated from here
search.h:83: error: no matching function for call to 'search()'

-------------------------------------
好像是基模版类中的成员(public 或者 protected成员)在继承类中不能直接访问, 尝试在每个成员访问之前用基类类域修饰之后能通过编译!

同样的代码在vc6中确没有这个问题, 不知道应该怎么解释, 谢谢
...全文
187 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
vc还是写上父类名称吧,基本上都能编译过去
hu_zy 2006-12-28
  • 打赏
  • 举报
回复
大哥,你先搞清楚大小写的问题再说别的吧。。。
声明的时候用的小写,定义时又用大写,当然编译会出错了。。
lbaby 2006-12-28
  • 打赏
  • 举报
回复
search();

这个函数是父类的吧
这个需要加父类的限定符的
lbaby 2006-12-28
  • 打赏
  • 举报
回复
帖全了看看

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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