Tôi đã ba lớp cấu trúc như thế này:Việc khắc phục C++ Nhiều Inheritance nhập nhằng Gọi
#include <iostream>
using namespace std;
class Keyword
{
public:
virtual float GetValue() = 0;
};
class CharacterKeyword : public Keyword
{
public:
virtual float GetValue(){return _value;}
private:
float _value;
};
class MeasurementKeyword : public Keyword
{
public:
virtual float GetValue(){return _value;}
private:
float _value;
};
class AddressType : public CharacterKeyword, public MeasurementKeyword
{
private:
float address;
float addresExt;
};
int main()
{
AddressType *a = new AddressType();
a->GetValue();
return 0;
}
Tôi nhận được những điều sau đây:
In function ‘int main()’:
error: request for member ‘GetValue’ is ambiguous
error: candidates are: virtual float Keyword::GetValue()
error: virtual float MeasurementKeyword::GetValue()
error: virtual float CharacterKeyword::GetValue()
Tôi đã thực hiện một số đọc vào nhiều thừa kế và tôi biết rằng nó có rất nhiều cạm bẫy - đây là một trong số chúng. Tôi cần cấu trúc lớp của tôi để được như thế này vì vậy tôi đã tự hỏi nếu có một cách mà tôi có thể sửa lỗi này bằng cách sử dụng mẫu?
Cập nhật
Sau khi đọc bình luận của bạn, suy nghĩ ban đầu của tôi là có lẽ tôi chỉ có thể phân định giữa một AddressType
đó là một CharacterKeyword
và một AddressType
đó là một MeasurementKeyword
bởi templating các AddressType
. Và sử dụng nó như vậy trong mã cập nhật. HOẶC Tôi chỉ có thể chỉ định không gian tên của thành viên mà tôi muốn. Kể từ khi các cách templated chưa được đề cập đến như là một câu trả lời, nó là một sửa chữa xấu? Tôi có nên chỉ định không gian tên của thành viên tôi muốn không?
template <class T>
class AddressType : public T
{
private:
float address;
float addresExt;
};
int main()
{
AddressType<MeasurementKeyword> *a = new AddressType<MeasurementKeyword>();
a->GetValue();
return 0;
}
Phụ thuộc vào cách bạn muốn để sửa lỗi này .. những gì bạn muốn xảy ra ở đây? –
@KarthikT đó là lý do tại sao tôi đã cho anh ta cả hai cách;) – aaronman
@aaronman Yup, không làm hỏng giải pháp của bạn, nhưng không chắc chắn những gì anh ta muốn hoàn thành với các mẫu .. –