У меня есть базовый класс, который объявляет и определяет конструктор, но по какой-то причине мой публично производный класс не видит этого конструктора, и поэтому я должен явно объявить конструктор пересылки в производном классе:
class WireCount0 {
protected:
int m;
public:
WireCount0(const int& rhs) { m = rhs; }
};
class WireCount1 : public WireCount0 {};
class WireCount2 : public WireCount0 {
public:
WireCount2(const int& rhs) : WireCount0(rhs) {}
};
int dummy(int argc, char* argv[]) {
WireCount0 wireCount0(100);
WireCount1 wireCount1(100);
WireCount2 wireCount2(100);
return 0;
}
В приведенном выше коде мое объявление WireCount1 wireCount1(100)
отклонено компилятором («Нет соответствующей функции для вызова WireCount1 :: WireCount1 (int) '»), в то время как мои объявления wireCount0
и wireCount2
подходят.
Я не уверен, что понимаю, почему мне нужно предоставить явный конструктор, показанный в WireCount2
.Это потому, что компилятор генерирует конструктор по умолчанию для WireCount1
, и этот конструктор скрывает конструктор WireCount0
?
Для справки, компилятор i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5659)
.