【问题标题】:Troubles with reference variables/pointers an class members [C++]引用变量/指针和类成员的问题 [C++]
【发布时间】:2015-05-12 03:39:55
【问题描述】:

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

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”,我看不到该错误,但在 bar 所在的 C.cpp 中仍然存在错误我的编译器完全无法识别(Visual Studio 2013)。即使 A& 是 A*,错误仍然存​​在(当然,在必要时将代码从引用更改为指针)。有人对这里发生的事情有任何提示吗?

【问题讨论】:

  • “破”是什么意思?编译器错误?运行时错误?出乎意料的结果?
  • B bar(foo) 存在编译器错误(成员 "C::foo" 不是类型名称),最终导致项目因编译器错误而中断
  • 旁注:您将临时副本传递给参考,您的B(A _test) 应该是B(A& _test)
  • 是的,这是一个快速类型的例子。我主要关心的是 C:foo 不是类型

标签: c++ class reference


【解决方案1】:

这行代码:

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

【讨论】:

  • 啊!这样可行。我已经习惯了在创建对象时使用构造函数,谢谢。编辑:就像我上面说的那样,被引用的测试只是输入一个快速示例的一种类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2011-09-09
相关资源
最近更新 更多