【问题标题】:Incomplete type is not allowed on static member静态成员上不允许不完整的类型
【发布时间】:2015-08-09 18:58:25
【问题描述】:

我正在重用旧项目中的一个类,它具有以下内容:

头文件

// forward class declarations
class TimeZoneInfo;

class DateTime
{
public:
    // constructors
    DateTime();
    static TimeZoneInfo  m_Info;
};

正文文件

TimeZoneInfo DateTime::m_Info; <-- Error Here
DateTime::DateTime()
{}
//blah blah

当我去构建这个时,我得到了错误:

错误:不允许输入不完整的类型:

为什么以前可以这样做? (我现在使用 Visual Studio 2013)

我该如何解决这个问题?谢谢

【问题讨论】:

    标签: c++ static-members incomplete-type


    【解决方案1】:

    为什么以前可以这样做?

    不能说。

    我该如何解决这个问题?

    在变量定义之前包含定义源文件中TimeZoneInfo 的标头。

    “不完整”表示该类型已声明,但未定义,因此只能以有限的方式使用。具体来说,你可以声明一个不完整类型的变量,但不能定义它。

    【讨论】:

      【解决方案2】:

      可以有一个静态的不完整类型成员。但是,它的类型应该在定义静态成员之前定义,即

      TimeZoneInfo DateTime::m_Info; // class TimeZoneInfo  must be fully defined before this line
      

      相关:Static field of an incomplete type - is it legal?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-26
        • 1970-01-01
        相关资源
        最近更新 更多