从其他班级访问班级的麻烦

时间:2020-06-30 13:40:07

标签: c++ class oop

刚开始学习c ++。我正在尝试用c ++进行新的尝试,就是要从另一个类访问一个类并更改其实例并在屏幕上打印其实例。

我想知道2件事1)我的代码有什么问题2)我应该在哪里声明类声明(在主文件或类定义文件中?)

这是错误日志-

'object::carrier' uses undefined class 'sub'
 'cout': is not a member of 'std'
 'cout': undeclared identifier

这就是我想出的- source.h

#include <iostream>
#include <vector>
#include "stuff.h"

int main()
{
    object spoon(3);
    spoon.get();

}

stuff.cpp

#pragma once
#include <vector>
class object;
class sub;


class object
{
private:
    std::vector <sub> thing;
public:
    object(int n);
    void get() const;
};


class sub
{
private:
    int num;
public:
    void set_num(int n);

};

stuff.cpp

#include <vector>
#include "stuff.h"

// methods for object
object::object(int n)
{
    sub carrier;
    carrier.set_num(n);
}

void object::get() const
{
    std::cout << carrier.num;
}

// methods for sub




void sub::set_num(int temp_num)
{
    num = temp_num;
}

谢谢

1 个答案:

答案 0 :(得分:1)

在您的object类中,特别是object::get定义中,使用变量carrier而不在范围内。

在构造函数中声明变量sub carrier时,只能在相同范围内(即构造函数内部)访问它。程序离开作用域后,变量carrier将被释放(删除)。

您必须像这样将变量sub carrier作为类的成员添加:

class object
{
private:
  sub carrier

  // other stuff
}

修改: 我让你编辑了问题。

您必须将cout替换为std::cout,因为cout是c ++标准库的一部分。或者,较不冗长的选项是在每个using namespace std;文件的顶部添加.cpp。这基本上告诉编译器您可以使用命名空间std,而无需明确说明。但是不要对.h文件执行此操作。这不是一个好主意。