gpt4 book ai didi

c++ - 为什么会发生这个错误?在派生类函数中使用基类函数时

转载 作者:行者123 更新时间:2023-11-28 05:23:19 26 4
gpt4 key购买 nike

#include <iostream>

class ZZ
{
public:
void print1()
{
std::cout << "hello\n";
}
};

class YY : public ZZ
{
public:
void print()
{
using ZZ::print1;
print1();
}
};

int main()
{
YY temp;
temp.print();
getchar();
return 0;
}

如果我编译代码,我会得到错误:错误:'ZZ' 不是命名空间或使用 ZZ::print1 的无作用域枚举;。我很困惑。


如果我在这个文件中定义另一个命名空间,像这样:

namespace tt{
int a;
}

我在派生函数 print 中使用它,如下所示:

void print()
{
using namespace tt;
a = 1;
}

代码将被成功编译。但我认为 ZZ 也是一个命名空间,因为如果我这样使用 ZZ:

public:
using ZZ::print1;
void print()
{
print1();
}

这段代码也会编译成功。


所以我不知道为什么在派生函数print中使用using ZZ::print1会出现这个错误。

最佳答案

仅仅因为您可以使用 ZZ:: 语法并不能说明 ZZ 是一个命名空间。 :: 是一个范围解析运算符,可以与命名空间范围以及类范围或枚举范围一起使用。在您的例子中,ZZ:: 指的是类 ZZ 的范围。

此外,语言规范指出

7.3.3 The using declaration

8 A using-declaration for a class member shall be a member-declaration.

这意味着引用类成员的 using 声明不能出现在本地范围内。它只能在类范围内使用。

这就是您上一个代码示例中的 using-declaration 编译成功的原因。

关于c++ - 为什么会发生这个错误?在派生类函数中使用基类函数时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41033384/

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