试图将两个类放在同一命名空间中的单独文件中,但只有#1个#Class类作品
Trying to put two classes in separate files in the same namespace, but only the first #included class works
在C 中,我试图将两个类放入同一名称空间中。
我在main
中遇到两个错误,说Head
类不在命名空间Names
中,并且在此范围内未声明days
。
看来,当我切换#include
语句的顺序时,两者之间不起作用的类拖鞋。从我阅读的内容来看,当包括第二个文件时,命名空间应该再次打开,并将第二类放入名称空间,但不起作用。
为什么我包括哪个工作的顺序?在将它们放在单独的标题文件中时,我该怎么做才能使这两个类成为同一名称空间的一部分?
main.cpp
#include <iostream>
#include "dy.hpp"
#include "dayyear.hpp"
int main(){
int d=2;
int y=5;
Names::Dy yup(y,d);
Names::Head days(y,d);
days.print();
yup.print();
return 0;
}
dayyear.hpp
#ifndef DY_H
#define DY_H
namespace Names{
class Head{
int year;
int day;
public:
Head();
Head(int y, int d);
void print();
void change(int y, int d);
};
}
#endif
dayyear.cpp
#include <iostream>
#include "dayyear.hpp"
Names::Head::Head(){
day=0;
year=0;
}
Names::Head::Head(int y, int d){
day=d;
year=y;
}
void Names::Head::print(){
std::cout<<day<<", "<<year<<std::endl;
}
void Names::Head::change(int y, int d){
year=y;
day=d;
}
dy.hpp
#ifndef DY_H
#define DY_H
namespace Names{
class Dy{
int year;
int day;
public:
Dy();
Dy(int y, int d);
void print();
void change(int y, int d);
};
}
#endif
dy.cpp
#include <iostream>
#include "dy.hpp"
Names::Dy::Dy(){
day=0;
year=0;
}
Names::Dy::Dy(int y, int d){
day=d;
year=y;
}
void Names::Dy::print(){
std::cout<<day<<", "<<year<<std::endl;
}
void Names::Dy::change(int y, int d){
year=y;
day=d;
}
那是因为dayyear.hpp和dy.hpp都有:
#ifndef DY_H
#define DY_H
.....
#endif
dayyear.hpp应该有:
#ifndef DAYYEAR_H
#define DAYYEAR_H
.....
#endif
预处理器仅考虑同一#infdef/#define/#endif
构造的首次出现,所有后续构造都用空代码替换。这就是为什么#include
语句的顺序很重要。
相关文章:
- 用C++在单独的头文件中完成函数体
- 如何使用单独文件中的派生类访问友元函数对象
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 如何将 2 个类分成单独的 .h 文件并正确设置它们
- C++ 链接到单独的.cpp文件说"multiple definitions"
- 从单独的文件中读取树
- 当结构位于单独的头文件中时'unregistered datatype'在 QML 中出现Q_GADGET错误
- 使用 Premake5 构建库,每个构建没有单独的项目文件
- 为什么要将函数声明和定义放在单独的文件中
- 使用 #include 将大量重复代码放入单独的文件中是否可以和/或正常?
- 创建单独的实现文件和头文件
- 在C++中对文件中的值单独执行计算
- 使用 ctest 的每个测试都需要单独的文件吗?
- 好友成员函数可以在单独的文件中使用吗?
- 运行单独的 cpp 文件,每个文件都有 main()
- 在 h 和 cpp 文件中单独声明和实现模板有时有效,有时会出现链接器错误
- 单独的类声明和方法定义文件问题
- 如何在C 中的Little Endian中读取来自二进制文件的单独的十六进制字符
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 单独文件中各种 c++ 类的标头出现问题