[英]Forward Declaration of Classes in C++
我編寫了以下代碼,以幫助我檢查繼承以及C ++中的分派/雙重分派如何工作,但無法編譯。 我已經查看了類原型/轉發聲明,並且這樣做了,但是仍然出現錯誤“ B是不完整的類型”,“ SubB是不完整的類型”等。這是什么問題?
#include <iostream>
class B;
class SubB;
class A {
public:
void talkTo(B b){
std::cout << "A talking to instance of B" << std::endl;
}
void talkTo(SubB sb){
std::cout << "A talking to instance of SubB" << std::endl;
}
};
class SubA : A {
public:
void talkTo(B b){
std::cout << "SubA talking to instance of B" << std::endl;
}
void talkTo(SubB sb){
std::cout << "SubA talking to instance of SubB" << std::endl;
}
};
class B {
public:
void talkTo(A a){
std::cout << "B talking to instance of A" << std::endl;
}
void talkTo(SubA sa){
std::cout << "B talking to instance of SubA" << std::endl;
}
};
class SubB : B {
public:
void talkTo(A a){
std::cout << "SubB talking to instance of A" << std::endl;
}
void talkTo(SubA sa){
std::cout << "SubB talking to instance of SubA" << std::endl;
}
};
將參數更改為引用即可完成這項工作(R Sahu的幫助),但是為什么現在不起作用?
class A {
public:
void talkTo(B &b){
//std::cout << "A talking to instance of B" << std::endl;
b.talkTo(this);
}
void talkTo(SubB &sb){
//std::cout << "A talking to instance of SubB" << std::endl;
sb.talkTo(this);
}
};
class B {
public:
void talkTo(A &a){
std::cout << "B talking to instance of A" << std::endl;
}
void talkTo(SubA &sa){
std::cout << "B talking to instance of SubA" << std::endl;
}
};
class SubB : B {
public:
void talkTo(A &a){
std::cout << "SubB talking to instance of A" << std::endl;
}
void talkTo(SubA &sa){
std::cout << "SubB talking to instance of SubA" << std::endl;
}
};
A a;
SubA subA;
B b;
SubB subB;
a.talkTo(b);
a.talkTo(subB);
當具有前向聲明時,只能將類型用作引用:指針和引用是最明顯的引用。
代替
void talkTo(B b){
std::cout << "A talking to instance of B" << std::endl;
}
void talkTo(SubB sb){
std::cout << "A talking to instance of SubB" << std::endl;
}
采用
void talkTo(B const& b){
std::cout << "A talking to instance of B" << std::endl;
}
void talkTo(SubB const& sb){
std::cout << "A talking to instance of SubB" << std::endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.