gpt4 book ai didi

C++ - 前向声明和别名(使用 using 或 typedef)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:30 26 4
gpt4 key购买 nike

我需要实现如下接口(interface)

struct mutex;
struct interface
{
//...
mutex& getMutex();
};

直觉我可以使用 using mutex = ParticularMutex在我的实现中,但 gcc 告诉我的不是这样:

error: conflicting declaration ‘using mutex = ’
error: ‘class mutex’ has a previous declaration as ‘class mutex’

我没有定义任何东西两次,只是声明两次,就像前向声明时一样,所以

  1. 为什么这行不通?
  2. 有没有不修改 interface 的解决方法? ?
  3. 应该如何interface被定义了吗?与 template <typename mutex>

最佳答案

  1. 它不起作用,因为前向声明 struct mutex; 告诉编译器 mutex 是一种新类型。通过 using,您随后创建了一个类型别名,这意味着它不是一个类型(如向编译器 promise 的那样),而是一个别名现有类型。

  2. 没有。

  3. 是。


可以做的是:

struct mutex : ParticularMutex {
using ParticularMutex::ParticularMutex; // inherit constructors
};

它确实定义了一个派生自 ParticularMutex 的类型,希望它足够兼容。当然,这是一种新类型,可能会导致其他问题。

关于C++ - 前向声明和别名(使用 using 或 typedef),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834645/

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