【发布时间】:2019-12-26 13:49:15
【问题描述】:
我正在尝试用最近定义的结构A替换前向声明的结构B。这是一个代码示例:
#include <iostream>
using namespace std;
namespace n1 {
struct B;
namespace n3 {
void func(B& b) {
cout << "b\n";
}
}
}
namespace n2 {
struct A{};
}
namespace n1 {
using B = n2::A;
}
int main() {
n1::B b;
n1::n3::func(b);
return 0;
}
并得到以下错误:
conflicting declaration ‘using B = struct n2::A’
using B = n2::A;
^
prog.cpp:5:8: note: previous declaration as ‘struct n1::B’
struct B;
如果它甚至是合法的,这个技巧是否可能以某种方式实现?我错过了什么吗?
【问题讨论】:
-
用例是什么?您尝试通过这样的方式解决的原始问题是什么(顺便说一句,这是无效的)?
-
我有一个接受结构 B 的函数。一个 实现 在公共命名空间中定义为 A。我希望能够通过使用
using将别名B 作为商业逻辑结构来替换所谓的implementation。但是上面的问题还是一样的。 -
也许您应该将
n1::n2::func改为模板函数?如果n1::B和n2::A的接口足够等价,那么模板应该可以正常工作。 -
n1::B 和 n2::A 被认为是 相同 目标,但在不同的命名空间中强调它们都使用的逻辑字段。我认为你没有解决问题。
标签: c++ namespaces typedef forward-declaration