使用参考变量/指示类成员[C ]的麻烦

Troubles with reference variables/pointers an class members [C++]

本文关键字:麻烦 成员 参考 变量 指示      更新时间:2023-10-16

我一直在研究一个项目,并且有很多课,其中一些看起来像这样:

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文件,如果我在b.h中#include" c.h",我不会看到该错误,但是在c.cpp中仍然存在一个错误我的编译器完全无法识别(Visual Studio 2013)。即使A&是一个A*(当然,在必要时将代码从引用更改为指针)。有人有任何提示这里发生的事情吗?

这条代码线:

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) { }