继承问题 [英] A problem with inheritance
问题描述
大家好再次向大家提供以前的反馈意见。
当我在
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屋!