C++不会让我使用struct作为模板参数

cac*_*bin 4 c++ templates struct

也许它是各种各样的标题......但这就是发生的事情:

编译器在行上给出了一个错误:

Queue<Email> mailbox;
Run Code Online (Sandbox Code Playgroud)

这是错误:

..\EmailSystem.h:25: error: ISO C++ forbids declaration of `Queue' with no type
..\EmailSystem.h:25: error: expected `;' before '<' token
Run Code Online (Sandbox Code Playgroud)

Queue.h:

#ifndef QUEUE_H_
#define QUEUE_H_

#include <string>
#include "EmailSystem.h"

...

template <class B>
class Queue {
 ...
};

#endif /* QUEUE_H_ */
Run Code Online (Sandbox Code Playgroud)

Queue.cpp:

#include "Queue.h"

...

template class Queue<Email>;
Run Code Online (Sandbox Code Playgroud)

EmailSystem.h:

#ifndef EMAILSYSTEM_H_
#define EMAILSYSTEM_H_

#include <iostream>
#include <string>
#include <vector>
#include "Queue.h"

struct Email {
    ...
};

struct User {
    std::string name;
    Queue<Email> mailbox;
};

...

#endif /* EMAILSYSTEM_H_ */
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 11

你有一个循环包括.Queue.h包括EmailSystem.hEmailSystem.h包括Queue.h所以包含警卫确保标题在第二次包含时不起作用.这意味着如果Queue.h第一个被包含在内,那么Queue在它首次被使用之前还没有被声明EmailSystem.h,此时:

Queue<Email> mailbox;
Run Code Online (Sandbox Code Playgroud)

我猜,但我觉得不太可能,你的模板Queue(如果它确实是一个通用类模板)需要了解Email,所以你或许应该删除#include "EmailSystem.h"Queue.h解决您的问题.