我是c ++的初学者。我正在学习有关查找名称(或解析)的文本。 我在下面的代码中通过“Derived :: Base obj”定义一个实例。但是obj没有Base类的void print()函数。这对我来说很奇怪。或者我误解了“Derived :: Base obj”的含义。 如果有人能告诉我代码中发生了什么。请告诉我。
class Base {
public:
void print(void) {
std::cout << "Base::print()." << std::endl;
}
};
class Derived : public Base {
};
Derived::Base obj;
obj.print(); // Error!! Compiler gives me an error message "error: ‘obj’ does not name a type"
答案 0 :(得分:1)
你不能这样做:
Derived::Base obj;
创建派生类的对象,只需使用:
Derived d;
d.print();
(来自评论):编译器没有给你任何错误的原因:
Derived::Base obj;
因为它创建了Base对象而不是派生对象。
你可以通过在派生类中创建类似的函数来测试它:
void print(void) {
std::cout << "Derived::print()." << std::endl;
}
和
Derived d;
d.print();
Derived::Base obj;
obj.print();