用最近定义的结构替换前向声明的结构
Substitute the forward declared struct with lately defined struct
我正在尝试用最近定义的结构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;
如果这个技巧合法的话,它是否可以以某种方式实现?我错过了什么吗?
您的 using
指令正在为 n2::A
创建别名,名称 n1::B
已被命名空间 n1
中的结构声明 struct B;
使用(它是不是结构 B 的另一个声明,它是名称别名)。您可能尝试实现的是提供您的 n1::B
结构的定义,可以像这样完成:
namespace n1
{
struct B {
// definition here, you might use your struct A if you need
};
}
您不能转发声明的别名。
如果合适,解决方法是使用继承而不是别名:
namespace n1 {
struct B;
namespace n3 {
void func(B& b) {
cout << "b\n";
}
}
}
namespace n2 {
struct A{};
}
namespace n1 {
struct B : n2::A{};
}
但是
n2::A a;
n1::n3::func(a); // Fail, a is not n1::B
我正在尝试用最近定义的结构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;
如果这个技巧合法的话,它是否可以以某种方式实现?我错过了什么吗?
您的 using
指令正在为 n2::A
创建别名,名称 n1::B
已被命名空间 n1
中的结构声明 struct B;
使用(它是不是结构 B 的另一个声明,它是名称别名)。您可能尝试实现的是提供您的 n1::B
结构的定义,可以像这样完成:
namespace n1
{
struct B {
// definition here, you might use your struct A if you need
};
}
您不能转发声明的别名。
如果合适,解决方法是使用继承而不是别名:
namespace n1 {
struct B;
namespace n3 {
void func(B& b) {
cout << "b\n";
}
}
}
namespace n2 {
struct A{};
}
namespace n1 {
struct B : n2::A{};
}
但是
n2::A a;
n1::n3::func(a); // Fail, a is not n1::B