gpt4 book ai didi

c++ - 试图将两个类放在同一个命名空间的不同文件中,但只有第一个 #included 类有效

转载 作者:行者123 更新时间:2023-11-30 05:04:24 25 4
gpt4 key购买 nike

在 C++ 中,我试图将不同文件中的两个类放入同一个命名空间。

我在 main 中收到两个错误,指出类 Head 不在命名空间 Names 中,并且 days 未在此范围内声明。

似乎当我切换 #include 语句的顺序时,不起作用的类在两者之间翻转。据我所知,当包含第二个文件时命名空间应该再次打开,并将第二个类放入命名空间,但它不起作用。

为什么我包含哪个的顺序与哪个有效有关?我该怎么做才能使这两个类成为同一命名空间的一部分,同时将它们保存在单独的头文件中?

主要.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;
}

日年.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

日年.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++ - 试图将两个类放在同一个命名空间的不同文件中,但只有第一个 #included 类有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48913775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com