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

软件和网站开发以及相关技术探讨
回复
头像
tanklis
帖子: 33
注册时间: 2009-05-13 22:36

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

#1

帖子 tanklis » 2009-08-30 19:01

在学习C++,发现书上提供的代码不能编译通过。。
class base
{
public:
virtual ~base() = 0 {
cout << "~base()" << endl;
}
};
是不是不能内联?
我装的不是菜鸟,是寂寞。
头像
wangdu2002
帖子: 13284
注册时间: 2008-12-13 19:39
来自: 物华天宝人杰地灵

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

#2

帖子 wangdu2002 » 2009-08-30 19:45

只一代码片段,编译个啥,要有完整的源程序、头文件,编译过程和出错信息贴出来,会的坛友如果看到了,才能分析错误。E文要好,看gcc文档。
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
头像
soething
帖子: 746
注册时间: 2008-07-23 19:06

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

#3

帖子 soething » 2009-08-30 20:09

出错的话,提供下完整的提示信息。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

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

#4

帖子 BigSnake.NET » 2009-08-30 21:02

显然有问题啊, 纯虚函数怎么会有函数体..
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
tanklis
帖子: 33
注册时间: 2009-05-13 22:36

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

#5

帖子 tanklis » 2009-08-30 23:43

囧。。这不是懒。。没有贴全么。。。
我发现把纯虚函数放到类的定义外边就可以了。。但是我的tic上的例子把定义放在里边了。。所以有点疑问。。。
错误信息好像是说什么pure函数之类的。。。
我装的不是菜鸟,是寂寞。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

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

#6

帖子 BigSnake.NET » 2009-08-30 23:54

tanklis 写了:囧。。这不是懒。。没有贴全么。。。
我发现把纯虚函数放到类的定义外边就可以了。。但是我的tic上的例子把定义放在里边了。。所以有点疑问。。。
错误信息好像是说什么pure函数之类的。。。
放哪都不行, 纯虚函数是用来被覆盖的.
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
tanklis
帖子: 33
注册时间: 2009-05-13 22:36

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

#7

帖子 tanklis » 2009-09-01 0:44

BigSnake.NET 写了:
tanklis 写了:囧。。这不是懒。。没有贴全么。。。
我发现把纯虚函数放到类的定义外边就可以了。。但是我的tic上的例子把定义放在里边了。。所以有点疑问。。。
错误信息好像是说什么pure函数之类的。。。
放哪都不行, 纯虚函数是用来被覆盖的.
纯虚函数的函数体放到类的定义外部是可以的吧。。。
我装的不是菜鸟,是寂寞。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

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

#8

帖子 BigSnake.NET » 2009-09-01 22:27

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

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
tanklis
帖子: 33
注册时间: 2009-05-13 22:36

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

#9

帖子 tanklis » 2009-09-01 22:46

BigSnake.NET 写了:
tanklis 写了:
BigSnake.NET 写了:
tanklis 写了:囧。。这不是懒。。没有贴全么。。。
我发现把纯虚函数放到类的定义外边就可以了。。但是我的tic上的例子把定义放在里边了。。所以有点疑问。。。
错误信息好像是说什么pure函数之类的。。。
放哪都不行, 纯虚函数是用来被覆盖的.
纯虚函数的函数体放到类的定义外部是可以的吧。。。
查了一下, 果然可以
囧~~~ :em02
顺便问一下,linux下编程看什么书好?最近有个涉及到音频输入输出还有过滤之类的作业。。。
我装的不是菜鸟,是寂寞。
头像
rchard
帖子: 80
注册时间: 2008-07-01 20:55
来自: Beijing
联系:

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

#10

帖子 rchard » 2009-09-04 13:03

类定义内部不可以又指定虚函数又有函数体的。
当虚函数作为抽象基类的析构函数,而且用了指针然后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;
}
头像
tanklis
帖子: 33
注册时间: 2009-05-13 22:36

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

#11

帖子 tanklis » 2009-09-04 22:50

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()么?
我装的不是菜鸟,是寂寞。
头像
rchard
帖子: 80
注册时间: 2008-07-01 20:55
来自: Beijing
联系:

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

#12

帖子 rchard » 2009-09-05 16:07

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++就是这么规定的。
头像
tanklis
帖子: 33
注册时间: 2009-05-13 22:36

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

#13

帖子 tanklis » 2009-09-05 17:06

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++就是这么规定的。

啊啊啊啊啊啊啊 啊。。又打错字了。。唉~~~不会盲打啊。。。
我装的不是菜鸟,是寂寞。
回复