从其他类访问类时遇到问题

trouble with accessing a class from a different class

本文关键字:遇到 问题 访问 其他      更新时间:2023-10-16

刚开始学习C++。我正在尝试 c++ 中的新事物,我想尝试的是从另一个类访问一个类并更改其实例并在屏幕上打印其实例。

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

这是错误日志 -

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

这就是我想出的——来源.h

#include <iostream>
#include <vector>
#include "stuff.h"
int main()
{
object spoon(3);
spoon.get();
}

东西.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);
};

东西.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;
}

谢谢

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

在构造函数中声明变量sub carrier时,它只能在同一范围内(即在构造函数内部(访问。一旦程序离开范围,变量carrier就会被释放(删除(。

您必须将变量sub carrier作为成员添加到类中,如下所示:

class object
{
private:
sub carrier
// other stuff
}

编辑: 我所以你编辑了你的问题。

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