继承问题 [英] A problem with inheritance

查看:57
本文介绍了继承问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好再次向大家提供以前的反馈意见。

当我在

MyContainer.h中省略继承时,这段代码非常适用

---------------

MyClass.h

----------- ----


#pragma一次


#include" MyContainer.h"


class MyClass {

private:

int myInteger;

MyContainer memberContainer;

public:

MyClass(无效);

~MyClass(无效);


};


- --------------------

MyContainer.h

----------- ----------


#pragma一次


#include< vector>

使用命名空间std;


class MyClass; //前向声明


class MyContainer:BaseContainer< MyClass * {

private:

vector< MyClass * myVector;

MyClass *指针;

public:

MyContainer(void);

int add(const MyClass * element){返回1; }

~MyContainer(无效);


};


--------- ---------------

BaseContainer.h

---------------- --------


#pragma一次


模板< class提示>

类BaseContainer

{

public:

BaseContainer(void);

virtual int add(const Tip element)= 0;

~BaseContainer(无效);

};

-------------

main.cpp

-------------


#include< iostream>


#include" MyClass.h"

#include" MyContainer.h"


void main(){

MyClass myInstance;

MyContainer myContainerInstance;


}


然而,有了BaseContainer继承到MyContainer,发生以下

问题:


f:\ C ++ \Projects\Probarka \ MyClass.h(9):错误C2259:''MyContainer'':
由于以下成员,
无法实例化抽象类



''int BaseContainer< Tip> :: add(const Tip)'':pure virtual

函数未定义

with

[

提示= MyClass *

]

f:\ C ++ \Projects\Probarka \ BaseContainer.h(8):见声明

''BaseContainer< Tip> :: add''

with

[

提示= MyClass *

]

我不能明白什么是错的。没有继承它完美地工作

。请帮忙。

Hello again and thnx to everybody for previous feedbacks.
This code works quite nicely when I omit the inheritance in
MyContainer.h

---------------
MyClass.h
---------------

#pragma once

#include "MyContainer.h"

class MyClass {
private:
int myInteger;
MyContainer memberContainer;
public:
MyClass(void);
~MyClass(void);

};

---------------------
MyContainer.h
---------------------

#pragma once

#include <vector>

using namespace std;

class MyClass; // forward declaration

class MyContainer : BaseContainer<MyClass *{
private:
vector<MyClass *myVector;
MyClass *pointer;
public:
MyContainer(void);
int add(const MyClass *element) { return 1; }
~MyContainer(void);

};

------------------------
BaseContainer.h
------------------------

#pragma once

template <class Tip>
class BaseContainer
{
public:
BaseContainer(void);
virtual int add(const Tip element) = 0;
~BaseContainer(void);
};
-------------
main.cpp
-------------

#include <iostream>

#include "MyClass.h"
#include "MyContainer.h"

void main() {
MyClass myInstance;
MyContainer myContainerInstance;

}

However, with BaseContainer inherited to MyContainer, the following
problem occurs:

f:\C++\Projects\Probarka\MyClass.h(9) : error C2259: ''MyContainer'' :
cannot instantiate abstract class
due to following members:
''int BaseContainer<Tip>::add(const Tip)'' : pure virtual
function was not defined
with
[
Tip=MyClass *
]
f:\C++\Projects\Probarka\BaseContainer.h(8) : see declaration
of ''BaseContainer<Tip>::add''
with
[
Tip=MyClass *
]
I can''t understand what''s wrong. Without the inheritance it works
perfectly. Please help.

推荐答案

ax *** *@gmail.com 写道:
ax****@gmail.com wrote:

int add(const MyClass * element){return 1; }
int add(const MyClass *element) { return 1; }



没有覆盖

does not have override


virtual int add(const Tip element)= 0;
virtual int add(const Tip element) = 0;



当Tip是MyClass *时。


如果提示是Myclass *,那么const提示是:


MyClass * const


因此覆盖将是

int add(MyClass * const element){..

when Tip is MyClass*.

If Tip is Myclass*, then const Tip is:

MyClass* const

hence the overrider would be
int add(MyClass* const element) { ..




Ron Natalie je napisao / la:

Ron Natalie je napisao/la:
ax **** @ gmail.com 写道:
ax****@gmail.com wrote:

int add(const MyClass * element){return 1; }
int add(const MyClass *element) { return 1; }



没有覆盖


does not have override


virtual int add(const Tip element)= 0;
virtual int add(const Tip element) = 0;


当Tip是MyClass *时



如果提示是Myclass *,那么const提示是:


MyClass * const


因此覆盖将是

int add(MyClass * const element){..


when Tip is MyClass*.

If Tip is Myclass*, then const Tip is:

MyClass* const

hence the overrider would be
int add(MyClass* const element) { ..



我尝试将''add''方法更改为你所说的,但我仍然是

得到相同的错误信息。

I tried changing the ''add'' method to what you''ve said, but I''m still
getting the same error message.


ax****@gmail.com 写道:
ax****@gmail.com wrote:

你好再次和thnx给大家以前的反馈。

当我在

MyContainer.h


---------------

MyClass.h
Hello again and thnx to everybody for previous feedbacks.
This code works quite nicely when I omit the inheritance in
MyContainer.h

---------------
MyClass.h



[snip]

[snip]


MyContainer.h

-------- -------------


#pragma一次


#include< vector>


使用命名空间std ;


类MyClass; //前向声明


class MyContainer:BaseContainer< MyClass * {

private:

vector< MyClass * myVector;

MyClass *指针;

public:

MyContainer(void);

int add(const MyClass * element){返回1; }

~MyContainer(无效);


};
MyContainer.h
---------------------

#pragma once

#include <vector>

using namespace std;

class MyClass; // forward declaration

class MyContainer : BaseContainer<MyClass *{
private:
vector<MyClass *myVector;
MyClass *pointer;
public:
MyContainer(void);
int add(const MyClass *element) { return 1; }
~MyContainer(void);

};



[snip]

[snip]


-------------

main.cpp

---- ---------


#include< iostream>


#include" MyClass.h"

#include" MyContainer.h"


void main(){

MyClass myInstance;

MyContainer myContainerInstance;


}
-------------
main.cpp
-------------

#include <iostream>

#include "MyClass.h"
#include "MyContainer.h"

void main() {
MyClass myInstance;
MyContainer myContainerInstance;

}



[snip]


Ron Natalie已经回答了你的问题。但是对你的

代码有两条评论。


首先,请不要放#include namespace std。在头文件中。

这是一个坏习惯,有一天会回来咬你 - 或者你的一个b $ b b同事。


其次,不要使用void main; - 它不是标准的,如果你切换到不同的编译器,可能不会
工作。


祝你好运,


Tom

[snip]

Ron Natalie has already answered your question. Two comments on your
code, though.

First, please don''t put "#include namespace std" in a header file.
It''s a bad habit and will come back to bite you - or one of your
colleagues - some day.

Second, don''t use "void main" - it''s not standard, and probably won''t
work if you switch to a different compiler.

Best regards,

Tom


这篇关于继承问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆