分页: 1 / 1

g++4.3.3是遵循什么规则的?

发表于 : 2009-08-30 19:01
tanklis
在学习C++,发现书上提供的代码不能编译通过。。
class base
{
public:
virtual ~base() = 0 {
cout << "~base()" << endl;
}
};
是不是不能内联?

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-08-30 19:45
wangdu2002
只一代码片段,编译个啥,要有完整的源程序、头文件,编译过程和出错信息贴出来,会的坛友如果看到了,才能分析错误。E文要好,看gcc文档。

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-08-30 20:09
soething
出错的话,提供下完整的提示信息。

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-08-30 21:02
BigSnake.NET
显然有问题啊, 纯虚函数怎么会有函数体..

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-08-30 23:43
tanklis
囧。。这不是懒。。没有贴全么。。。
我发现把纯虚函数放到类的定义外边就可以了。。但是我的tic上的例子把定义放在里边了。。所以有点疑问。。。
错误信息好像是说什么pure函数之类的。。。

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-08-30 23:54
BigSnake.NET
tanklis 写了:囧。。这不是懒。。没有贴全么。。。
我发现把纯虚函数放到类的定义外边就可以了。。但是我的tic上的例子把定义放在里边了。。所以有点疑问。。。
错误信息好像是说什么pure函数之类的。。。
放哪都不行, 纯虚函数是用来被覆盖的.

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-09-01 0:44
tanklis
BigSnake.NET 写了:
tanklis 写了:囧。。这不是懒。。没有贴全么。。。
我发现把纯虚函数放到类的定义外边就可以了。。但是我的tic上的例子把定义放在里边了。。所以有点疑问。。。
错误信息好像是说什么pure函数之类的。。。
放哪都不行, 纯虚函数是用来被覆盖的.
纯虚函数的函数体放到类的定义外部是可以的吧。。。

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-09-01 22:27
BigSnake.NET
tanklis 写了:
BigSnake.NET 写了:
tanklis 写了:囧。。这不是懒。。没有贴全么。。。
我发现把纯虚函数放到类的定义外边就可以了。。但是我的tic上的例子把定义放在里边了。。所以有点疑问。。。
错误信息好像是说什么pure函数之类的。。。
放哪都不行, 纯虚函数是用来被覆盖的.
纯虚函数的函数体放到类的定义外部是可以的吧。。。
查了一下, 果然可以

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-09-01 22:46
tanklis
BigSnake.NET 写了:
tanklis 写了:
BigSnake.NET 写了:
tanklis 写了:囧。。这不是懒。。没有贴全么。。。
我发现把纯虚函数放到类的定义外边就可以了。。但是我的tic上的例子把定义放在里边了。。所以有点疑问。。。
错误信息好像是说什么pure函数之类的。。。
放哪都不行, 纯虚函数是用来被覆盖的.
纯虚函数的函数体放到类的定义外部是可以的吧。。。
查了一下, 果然可以
囧~~~ :em02
顺便问一下,linux下编程看什么书好?最近有个涉及到音频输入输出还有过滤之类的作业。。。

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-09-04 13:03
rchard
类定义内部不可以又指定虚函数又有函数体的。
当虚函数作为抽象基类的析构函数,而且用了指针然后delete,必须要有函数体。
比如:

代码: 全选

class base {
public :
  base() {}
  virtual ~base() = 0; //error!
  virtual ~base() {}; //ok!
};

class deriver : public base {
public :
  deriver() {}
  ~deriver() {}
};

int main() {
  deriver *p = new deriver();
  delete p;
  return 0;
}

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-09-04 22:50
tanklis
rchard 写了:类定义内部不可以又指定虚函数又有函数体的。
当虚函数作为抽象基类的析构函数,而且用了指针然后delete,必须要有函数体。
比如:

代码: 全选

class base {
public :
  base() {}
  virtual ~base() = 0; //error!
  virtual ~base() {}; //ok!
};

class deriver : public base {
public :
  deriver() {}
  ~deriver() {}
};

int main() {
  deriver *p = new deriver();
  delete p;
  return 0;
}

呃。。呃是为什么呢?因为delete deriver时调用了~base()么?

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-09-05 16:07
rchard
tanklis 写了:
rchard 写了:类定义内部不可以又指定虚函数又有函数体的。
当虚函数作为抽象基类的析构函数,而且用了指针然后delete,必须要有函数体。
比如:

代码: 全选

class base {
public :
  base() {}
  virtual ~base() = 0; //error!
  virtual ~base() {}; //ok!
};

class deriver : public base {
public :
  deriver() {}
  ~deriver() {}
};

int main() {
  deriver *p = new deriver();
  delete p;
  return 0;
}

呃。。呃是为什么呢?因为delete deriver时调用了~base()么?
呃……呃是为什么呢?因为我也不知道,反正c++就是这么规定的。

Re: g++4.3.3是遵循什么规则的?

发表于 : 2009-09-05 17:06
tanklis
rchard 写了:
tanklis 写了:
rchard 写了:类定义内部不可以又指定虚函数又有函数体的。
当虚函数作为抽象基类的析构函数,而且用了指针然后delete,必须要有函数体。
比如:

代码: 全选

class base {
public :
  base() {}
  virtual ~base() = 0; //error!
  virtual ~base() {}; //ok!
};

class deriver : public base {
public :
  deriver() {}
  ~deriver() {}
};

int main() {
  deriver *p = new deriver();
  delete p;
  return 0;
}

呃。。呃是为什么呢?因为delete deriver时调用了~base()么?
呃……呃是为什么呢?因为我也不知道,反正c++就是这么规定的。

啊啊啊啊啊啊啊 啊。。又打错字了。。唉~~~不会盲打啊。。。