C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
C++ override function from same base template class with multiple inheritance ambiguous function call
我需要调用从基类派生的init(int* iNumber)
函数。
baseclass.h
#pragma once
#include "stdafx.h"
template <class T>
class BaseClass
{
public:
BaseClass() {}
virtual ~BaseClass() {}
virtual void init(T* object) = 0;
};
childClass.h
#pragma once
#include "BaseClass.h"
class ChildClass : public BaseClass<int>, public BaseClass<float>
{
public:
ChildClass() {}
virtual ~ChildClass() {}
};
childClassimpl.h
#pragma once
#include "ChildClass.h"
class ChildClassImpl : public ChildClass
{
public:
ChildClassImpl();
virtual ~ChildClassImpl();
private:
void init(int* iNumber) override;
void init(float* fNumber) override;
};
childclassimpl.cpp
#include "stdafx.h"
#include <iostream>
#include "ChildClassImpl.h"
ChildClassImpl::ChildClassImpl(){}
ChildClassImpl::~ChildClassImpl(){}
void ChildClassImpl::init(int* iNumber)
{
std::cout << "Integer constructor: " << *iNumber << std::endl;
}
void ChildClassImpl::init(float* fNumber)
{
std::cout << "Float constructor: " << *fNumber << std::endl;
}
MainClass
#include "stdafx.h"
#include <iostream>
#include "ChildClassImpl.h"
using namespace std;
int main()
{
ChildClass* childClass = new ChildClassImpl();
int x = 10;
childClass->init(&x);
cout << "Test" << endl;
getchar();
return 0;
}
在编译时,这是错误
Severity Code Description Project File Line Error (active) "BaseClass<T>::init [with T=int]" is ambiguous ConsoleApplication4 d:LearningConsoleApplication4ConsoleApplication4ConsoleApplication4.cpp 14
我在这里做错了什么?我如何通过最小的更改来修复它?
此代码失败,因为C 在分辨率和访问控制检查之前执行名称查找。这是第一步是确定init
类属于哪个类范围。在这种情况下,结果将是模棱两可的,因为init
可以指BaseClass<int>::init
或BaseClass<float>::init
。引入额外的using
声明将将这两个功能都带入ChildClass
范围:
class ChildClass : public BaseClass<int>, public BaseClass<float>
{
public: using BaseClass<int>::init;
public: using BaseClass<float>::init;
因此,名称查找将确定init
是指ChildClass::init
,并且编译器将继续分辨率。
另外,您可以执行演员表(绝对不那么方便):
static_cast<BaseClass<int> *>(childClass)->init(&x);
相关文章:
- 如何在 c++ 多重继承中调用父非虚函数?
- 派生类调用使用非继承成员的继承函数
- 从多重继承中的派生类函数调用适当的父类函数
- 为什么当一个模板类继承自另一个模板类时,需要重新指定 typedef 并限定函数调用?
- C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
- C++ 中的多级继承和调用基构造函数
- 为什么我继承的构造函数调用我的基本默认构造函数
- C 指针在函数调用后的继承中失去价值
- 多重继承析构函数调用他自己和父析构函数?c++
- 没有匹配的函数调用CTOR,多重继承
- C++继承-从构造函数调用重写
- C++中的多个虚拟继承抱怨特定的函数调用
- C++多级继承函数调用
- C++继承的复制构造函数调用
- 在虚拟继承中构造函数调用的顺序是什么
- C++:从全局函数调用继承的成员函数
- 在C++中的多重继承中调用构造函数中的基成员
- 基类指向派生类继承函数调用的指针
- 在简单继承之后调用复制构造函数
- 对可变模板多继承函数调用的访问不稳定