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.h和EmailSystem.h包括Queue.h所以包含警卫确保标题在第二次包含时不起作用.这意味着如果Queue.h第一个被包含在内,那么Queue在它首次被使用之前还没有被声明EmailSystem.h,此时:
Queue<Email> mailbox;
Run Code Online (Sandbox Code Playgroud)
我猜,但我觉得不太可能,你的模板Queue(如果它确实是一个通用类模板)需要了解Email,所以你或许应该删除#include "EmailSystem.h"从Queue.h解决您的问题.
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |