我刚开始学习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;
}
谢谢
在object
类中,特别是object::get
定义中,您使用变量carrier
而不在作用域中。
当您在构造函数中声明变量sub carrier
时,它只能在相同的作用域中访问,即在构造函数内部。 一旦您的程序离开作用域,变量carrier
将被释放(删除)。
必须将变量sub carrier
作为成员添加到类中,如下所示:
class object
{
private:
sub carrier
// other stuff
}
编辑:我所以你编辑了你的问题。
您必须用std::cout
替换cout
,因为cout
是C++标准库的一部分。 或者,一个不那么冗长的选项是在每个.cpp
文件的顶部添加使用名称空间std;的。 这基本上告诉编译器,您可以使用名称空间
std
,而无需显式地说明它。 但不要对.h
文件执行此操作。 这可不是个好主意。