定义DerivedClass :: BaseClass obj;不起作用

时间:2015-10-19 13:40:42

标签: c++

我是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"

1 个答案:

答案 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();