gpt4 book ai didi

c++ - N 不命名类型

转载 作者:行者123 更新时间:2023-11-30 00:47:51 25 4
gpt4 key购买 nike

// q.h file
#ifndef __Q_H__
#define __Q_H__


using namespace std;
#include "n.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <string>


class Q
{
public:
Q();


private:
N* beginning; //error N does not name a type
N* end; //error N does not name a type
int count;

};

#endif // end of file




// q.cpp file
#include "q.h"
#include "n.h"
#include <iostream>
using namespace std;
#include<string>

Q::Q()
{

beginning = NULL;
end = NULL;

}


// n.h file
#ifndef _N_H__
#define _N_H__
using namespace std;
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <string>

#include "q.h"


class N
{
public:

N(int);
// next is a pointer object of type N
N* next;
// memeber for Node class
int value;
};
#endif

// n.cpp file
#include<string>
#include "q.h"
#include "n.h"



N::N(int v)
{
value = v;

}

我在以下几行中收到错误。我尝试更改用户命名空间标准;到每个文件的第一行,但仍然不起作用。我也试过改变 q.h 和 n.h 的顺序,但仍然没有。

N*开头; N*结束;

我也知道一个很好的解决方案是使用“前向声明”,但这是我某人给我的测试文件的一部分,所以我不能做一个类的前向声明。

因此,如果有人可以,请看看我如何解决这个问题。

谢谢。

最佳答案

您有一个循环引用( q.h 包括 n.hn.h 包括 q.h )。发生此错误是因为编译器包含(可能是因为主程序)q.hn.h之前.因此,q.h需要包含一个空类声明,如下所示 Q知道 N .

...#include <string>class N;class Q{...

如果您不能编辑这些文件,您仍然可以在“Q”类声明之前的任何位置添加空类声明(例如,在您的主程序中包含 q.h 之前)。但是,类 N不需要 Q 的任何东西, 所以你不需要包括 q.hn.h .

关于c++ - N 不命名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33495940/

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