c++如何从没有头文件的不同文件中扩展类



我正在尝试做一个基本的多态性程序,我有一些问题。我有两个文件,Currency.cpp和Dollar.cpp

Currency.cpp看起来像这样

#include <iostream>
using namespace std;
class Currency{
/* code */
};

Dollar.cpp看起来像这样

#include <iostream>
using namespace std;
class Dollar : protected Currency{
/* code /*
};

当我尝试在文件之间构建路径(mac上的命令shift b)时,它告诉我货币不被识别为一个类(即在Dollar.cpp中)。我不应该使用头文件,因为这是一个指定的赋值。我该怎么办?

我在2020年m1 Mac上使用vs code,如果这与它有任何关系

编辑:感谢所有的反馈。据我所知,我的要求是不可能的。这是一个数据结构和算法类的作业,它接受多种语言,所以老师可能对c++或其他东西生疏了。我只需要使用头文件,教授只需要处理它,哈哈。

我不应该使用头文件,因为这是一个指定的赋值。

代码不会像所示的那样工作。Dollar.cpp需要知道Currency类是什么样子才能使用它。

理想的解决方案是使用头文件跨翻译单元共享声明,使用.cpp文件实现定义,例如:

Currency.h:

#ifndef CurrencyH
#define CurrencyH
class Currency{
/* code */
};
#endif

Currency.cpp:

#include <iostream>
#include "Currency.h"
using namespace std;
// implement Currency's methods as needed...

Dollar.cpp:

#include <iostream>
#include "Currency.h"
using namespace std;
class Dollar : protected Currency{
/* code /*
};

但是,由于这不是您的选择,您别无选择,只能将整个Currency类声明直接复制到Dollar.cpp中,并确保它Currency.cpp中的类声明完全匹配,以避免任何ODR违规,例如:

Currency.cpp:

#include <iostream>
using namespace std;
class Currency{
/* code */
};
// implement Currency's methods as needed...

Dollar.cpp:

#include <iostream>
using namespace std;
class Currency{
/* code */
};
class Dollar : protected Currency{
/* code /*
};

相关内容

  • 没有找到相关文章

最新更新