刚开始学习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;
}
谢谢
答案 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
文件执行此操作。这不是一个好主意。