当我这样做时,我的编译器抱怨。出现了3个错误,但没有可见的错误消息:
#include <stdlib.h>
#include <vector>
#include <string>
#include "ParseException.h"
#include "CycleFoundException.h"
#include "UnknownTargetException.h"
using namespace std;
class Maker
{
private:
vector<Node> storage;
public:
Maker(string file) throw (ParseException, CycleFoundException, UnknownTargetException);
vector<string> makeTarget(string targetName);
};
struct Node
{
string target;
vector<string> dependencies;
string command;
int discoverytime;
int finishtime;
int visited;
Node* next;
};
编译器不喜欢我的vector<Node> storage
声明。当我改为vector<int> storage
时,它会毫无怨言地编译。在另一个类中声明一个类的对象是错误的吗?我觉得这没问题。
答案 0 :(得分:7)
您似乎需要在Node
的定义之前加上Maker
的定义。
您在Node
的定义中使用类型名称Maker
(在行vector<Node> storage
中),但因为您尚未定义Node
但编译器没有知道它是什么。