专用结构/类中未识别的数据成员

Posted

技术标签:

【中文标题】专用结构/类中未识别的数据成员【英文标题】:Not Recognized Data Members in Specialized Structs/Classes 【发布时间】:2019-04-26 20:01:43 【问题描述】:

为了包含条件数据成员,我使用专门的模板而不是命名空间,然后在每个专门化中重载赋值运算符。发生的情况是在编译期间,不识别特化的成员变量。我不明白为什么,在网上也找不到任何东西。

enum Def : int A, B;

template<Def T>
struct X ;

// Forward declaration does not help, like it would in non-template implementations. 
/*
*     template<>
*     struct X<B>;
*/

template<>
struct X<A>

    int a;
    int b;
    X<A> & operator = (const X<B> & obj)
    
         a = obj.a;
         b = obj.b;
    


template<>
struct X<B>

    int a;
    int b;
    int c;
    int d;
    X<B> & operator = (const X<A> & obj)
    
         a = obj.a;
         b = obj.b;
    

现在发生的情况是,在编译时,我收到 X&lt;B&gt; 没有名为 ab 的成员的错误。这里有什么问题?

【问题讨论】:

【参考方案1】:

问题是,当X&lt;B&gt; 在特化X&lt;A&gt; 的定义中被实例化时(这是X&lt;A&gt;::operator = 的定义所要求的),特化X&lt;B&gt; 的定义还不可见。这意味着它将是主模板中的implicitly instantiated,它没有成员ab

您可以将X&lt;A&gt;::operator = 的定义移出专业化X&lt;A&gt; 的定义和X&lt;B&gt; 的专业化定义之后。例如

template<>
class X<A>

    int a;
    int b;
    X<A> & operator = (const X<B> & obj);
;

template<>
class X<B>

    ...
;

X<A> & X<A>::operator = (const X<B> & obj)

     a = obj.a;
     b = obj.b;

【讨论】:

谢谢,这解释得很好。

以上是关于专用结构/类中未识别的数据成员的主要内容,如果未能解决你的问题,请参考以下文章

虚拟机网卡显示未识别的网络,求解决!?

win10系统出现多个以太网未识别的网络解决方法

VMware Virtual Ethernet Adapter for VMnet1和和VMnet8 显示未识别的网络,如何解决?

我的笔记本的本地连接有两个网络,一个网络二,一个未识别的网络,该怎么办??

server2012未识别的网络

新装的WIN7系统,网络连接显示的是未识别的网络,数据包发送有数字,接收是0,请问如何解决....