我需要实现如下接口(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’
我没有定义任何东西两次,只是声明两次,就像前向声明时一样,所以
- 为什么这行不通?
- 有没有不修改
interface
的解决方法? ? - 应该如何
interface
被定义了吗?与template <typename mutex>
?
最佳答案
它不起作用,因为前向声明
struct mutex;
告诉编译器mutex
是一种新类型。通过using
,您随后创建了一个类型别名,这意味着它不是一个新类型(如向编译器 promise 的那样),而是一个别名现有类型。没有。
是。
您可以做的是:
struct mutex : ParticularMutex {
using ParticularMutex::ParticularMutex; // inherit constructors
};
它确实定义了一个派生自 ParticularMutex
的类型,希望它足够兼容。当然,这是一种新类型,可能会导致其他问题。
关于C++ - 前向声明和别名(使用 using 或 typedef),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834645/