引用变量/指针和类成员的麻烦[C ++]

时间:2015-05-12 03:39:55

标签: c++ class reference

我一直在做一个项目并且有很多课程,其中一些是这样的:

class A
{
    // stuff;
};

class B
{
    A& test;

public:
    B(A& _test) :
        test(_test)
    {};
    void doStuff();
};

class C
{
    A foo;
    B bar(foo);

    void exp()
    {
        bar.doStuff();
    }
};

当C :: foo不是类型名称时,这最终会在C类中中断。在我的大项目中,所有内容都被分解为单独的.cpp和.h文件,如果我在Bh中#include“Ch”,我没有看到错误,但是C.cpp中仍然存在错误,其中bar是我的编译器完全无法识别(Visual Studio 2013)。即使A& A仍然存在错误。是一个A *代替(当然,在必要时更改代码引用指针)。有没有人对这里发生的事情有什么建议?

1 个答案:

答案 0 :(得分:3)

这行代码:

B bar(foo);

尝试声明名为bar的成员函数,该函数返回B并采用类型为foo的参数。但是,在您的代码中,foo不是类型 - 它是一个变量。我猜你想要初始化bar而不是:

B bar{foo}; // non-static data member initializers must be done with {}S

或者只写出构造函数:

C()
: bar(foo)
{ }

此外,此构造函数会将您的引用test分配给临时_test

B(A _test) :
    test(_test)
{ }

您想通过引用获取_test

B(A& _test) : test(_test) { }