Playable中有class Playable:Title { public: using Title::setColor; using Title::getColor;为什么还会报上述错误
时间: 2024-04-01 13:32:28 浏览: 17
根据你提供的代码,使用了using关键字来继承了Title类的setColor和getColor函数,因此在Playable类中应该可以直接访问setColor和getColor函数。
但是,在Empire类中访问Playable类的getColor函数时,仍然会出现'getColor' is a private member of 'Playable'这个错误,这可能是因为Empire类中没有包含Playable类的头文件,或者头文件中没有包含Playable类的定义。
请确保在Empire类中包含Playable类的头文件,并且头文件中包含Playable类的完整定义。如果还是无法解决问题,可以尝试重新编译代码,或者检查代码中是否有其他错误。
相关问题
empire.cpp:189:42: error: 'getColor' is a private member of 'Playable' empire.h:42:14: note: constrained by implicitly private inheritance here county.h:15:18: note: member is declared here
这个错误通常是因为尝试在Playable类的外部访问其私有成员函数getColor()。
在这种情况下,可能需要在类定义中增加一个公有的接口函数,允许外部访问getColor()函数。
例如,在Playable类中添加一个公有的getColor()函数:
```c++
class Playable : public County {
public:
// 公有接口函数
QColor getColor() const {
return m_color;
}
private:
// 私有成员函数
virtual QColor generateColor() const {
// 生成颜色的代码
}
QColor m_color;
};
```
然后在Empire类中,可以使用Playable类的公有接口函数来获取颜色:
```c++
class Empire {
public:
void printColor() const {
Playable playable;
QColor color = playable.getColor();
qDebug() << "Color: " << color.name();
}
};
```
这样就可以在Empire类中访问到Playable类的颜色了。
注意:如果是Playble类的派生类,可以通过protected访问基类的私有成员函数。但是,在其他类中,不能直接访问基类的私有成员函数。
county.cpp:13:9: error: constructor for 'County' must explicitly initialize the base class 'Playable' which does not have a default constructor county.h:11:7: note: 'Playable' declared here
这个错误是因为在 `County` 类的构造函数中没有显式调用 `Playable` 类的构造函数,而 `Playable` 类没有默认构造函数。因此,需要在 `County` 类的构造函数初始化列表中调用 `Playable` 类的有参构造函数,传递必要的参数。
例如,如果 `Playable` 类的有参构造函数为 `Playable(int id)`,则 `County` 类的构造函数应该这样写:
```c++
County::County(int id, std::string name) : Playable(id), countyName(name) {
// 其他初始化代码
}
```
其中,`Playable(id)` 表示调用 `Playable` 类的有参构造函数,并传递参数 `id`。另外,需要注意的是,初始化列表中的初始化顺序应该与类定义中声明的顺序一致,否则可能会导致一些意外的问题。