使用static int的友谊和命名空间的未定义引用

时间:2015-09-17 05:02:17

标签: c++ static scope namespaces friend

我有一个类,我在其中声明了与名称空间之外的另一个类的友谊。现在该类有一个我想访问的静态整数。

以下是代码:

var gulp     = require('gulp');
var elixir   = require('laravel-elixir');
var semantic = {
  watch: require('./resources/assets/semantic/tasks/watch'),
  build: require('./resources/assets/semantic/tasks/build')
};

gulp.task('watch-ui', semantic.watch);
gulp.task('build-ui', semantic.build);

elixir(function(mix) {
  mix.task('build-ui');
});

现在,如果我编译了这段代码,我会收到以下错误:

    class A
    {
    public:
        void init();
    };


    namespace C
    {

    class B 
    {
       friend class ::A;

    private:
        static int i;
    };
    }


    void A::init()
    {
        C::B::i=3;
    }

    int main()
    {
        A f;

        f.init();

        return 0;
    }

现在根据我的理解,声明就在那里,因此 /tmp/ccmDINqo.o: In function `A::init()': friendclass.cpp:(.text+0xa): Undefined reference to `C::B::i' collect2: error: ld returned 1 exit status 实际上是在尝试为init()分配一个值。

我认为编译工作正常,但链接器似乎抱怨。

为什么不构建此代码,如何修复它以便构建?

0 个答案:

没有答案