【问题标题】:Static object in struct [duplicate]结构中的静态对象[重复]
【发布时间】:2015-01-10 10:15:31
【问题描述】:

我有类A 和方法display()。我创建了一个结构体B,其静态变量类型为对象A

class A{
public :
    void display()
    {
        cout << "in A " << endl;
    }
};
typedef struct B{
    static A a;
} bb;

//B::a.display();
int main() {
    bb b;
    bb::a.display();
    return 0;
}

现在尝试访问a 时出现错误。

在这种情况下如何定义静态对象?

【问题讨论】:

  • 错误信息是什么,您是使用using-directive 还是using-declarations 使std 的命名空间符号可用?
  • 我认为它只是声明对象 A.B::a.display();不起作用,因为未定义对 `B::a' 的引用。
  • @KarolyHorvath:在哪里?
  • @Rerito 您能否更具体地说明 using-directive 或 using-declarations
  • @MemoryLeak,这里有一篇文章可以让你了解 C++ 中的命名空间:winterdom.com/dev/cpp/nspaces

标签: c++ object struct static


【解决方案1】:

您声明了static A a;,但没有定义它。在int main()前面加上下面这行就可以链接成功了:

A B::a;

【讨论】:

  • 由于没有定义A的构造函数,编译器不会自动调用默认构造函数来初始化一个?
  • @Rerito:是的。并不意味着你不必定义它。
  • @LightnessRacesinOrbit :在 Ideone 上进行了测试,除了 using-directive 之外没有添加任何内容:ideone.com/0LkbNE。为什么它起作用了?
  • @Rerito:无法访问数据成员。因此没有odr-useHere's the real testcase.
  • @LightnessRacesinOrbit 好的,知道了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-10-06
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
相关资源
最近更新 更多