gpt4 book ai didi

派生列表中的 C++ 作用域运算符

转载 作者:行者123 更新时间:2023-11-30 02:01:03 25 4
gpt4 key购买 nike

我在 WinImp.h 中收到一个错误,提示 'Root' has not been declared。如果我不使用范围运算符 (class WinImp : public BaseDef),则错误为 error: expected class-name before '{' token)。有人知道为什么会这样吗?

根.h

class Root {
public:
class BaseDef {
public:
virtual void foo() = 0;
virtual void bar() = 0;
};
private:
#ifdef _WIN32
friend class WinImp;
#else
friend class NixImp;
#endif

BaseDef* imp;

BaseDef* getImp();

public:
Root() : imp(getImp()) {}
void foo();
void bar();
};

根.cpp

#include "Root.h"
void Root::foo() {
imp->foo();
}

void Root::bar() {
imp->bar();
}

WinImp.h

#ifdef _WIN32
#include "Root.h"
class WinImp : public Root::BaseDef {
public:
void foo();
void bar();
};
#endif

WinImp.cpp

#include "WinImp.h"
#ifdef _WIN32
void WinImp::foo() {

}

void WinImp::bar() {

}

Root::BaseDef* Root::getImp() {
return static_cast<BaseDef*>(new WinImp());
}
#endif

最佳答案

您正在访问 Root 中的 BaseDef 接口(interface),因此它们应该是公开的:

class BaseDef 
{
public:
virtual void foo() = 0;
virtual void bar() = 0;
};

在 WinImp.cpp 中,foo(), bar() 需要返回类型并且它们不在 Root 范围内,应该是:

void WinImp::foo() { }
void WinImp::bar() { }

关于派生列表中的 C++ 作用域运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14530740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com