gpt4 book ai didi

c++ - 在 gcc 中使用关键字

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:46 24 4
gpt4 key购买 nike

我得到了两个包含相同变量名称 ('aa') 的结构('AAA' 和 'BBB'),以及通过多重继承使用两者定义的第三个结构('CCC')。[这两个结构应该是无关的,所以当两个类有一个共同的祖先时,这不是著名的菱形问题]。对于派生结构“CCC”,我试图明确选择在派生结构“AAA”中使用 var,但 gcc 仍然提示模棱两可的 def。为什么?

struct AAA { int aa; };
struct BBB { int aa; };
struct CCC : public AAA , public BBB { using AAA::aa; };
int main() { CCC ccc; return ccc.aa; }

给出:

x.cpp: In function 'int main()':
x.cpp:4:34: error: request for member 'aa' is ambiguous
x.cpp:2:18: error: candidates are: int BBB::aa
x.cpp:1:18: error: int AAA::aa

最佳答案

它失败了,因为 aa 已经在该范围内。 使用 AAA.aa 只会再次将其纳入范围。

您可以将其转换为类型并以这种方式提取它。

#include <iostream>
struct AAA {
int aa;
AAA() : aa(1) {}
virtual ~AAA(){};
};
struct BBB {
int aa;
BBB() : aa(5) {}
virtual ~BBB(){};
};

struct CCC : public AAA , public BBB
{
CCC() : AAA(), BBB() {}
// using AAA::aa;
};

int main()
{
CCC ccc;
std::cout << static_cast<BBB*>(&ccc)->aa << std::endl;
}

虽然如果这是您打算做的很多事情,但封装该功能可能会更容易。

//member of CCC
int get_aa()
{
return static_cast<BBB*>(this)->aa;
}

关于c++ - 在 gcc 中使用关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9568779/

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