我遇到了一个问题,我设法解决了这个问题,但仍然想了解语言及其背后的推理。我有以下三类系统:
文件class_a.hpp
#pragma once
class A
{
public:
A();
};
文件class_b.hpp
#pragma once
#include "class_a.hpp"
class B : A
{
public:
B() : A() {}
virtual double do_something(A &with_object) const;
};
文件class_c.hpp
#pragma once
#include "class_b.hpp"
class C : B
{
public:
C() : B() {}
double do_something(::A &with_object) const; // but differently than class B
};
现在,如果我不A
使用C方法中的类型的完全限定名称do_something()
,我会在编辑器中收到以下错误:
类型“A::A”(在“class_a.hpp”的第 27 行声明)不可访问 C/C++(265)
在这种情况下,什么可能导致任何歧义?我当然没有重新定义或使用名称A
作为标识符。后台是否发生了使用类名的事情?
方法的覆盖是否do_something()
保证以这种方式工作,或者是否A
还需要限定 B 方法中的类型?
任何建议和/或指针也非常感谢!