为什么我不能在班上做这个对象声明?

时间:2012-11-12 21:05:46

标签: c++ class object

当我这样做时,我的编译器抱怨。出现了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时,它会毫无怨言地编译。在另一个类中声明一个类的对象是错误的吗?我觉得这没问题。

1 个答案:

答案 0 :(得分:7)

您似乎需要在Node的定义之前加上Maker的定义。

您在Node的定义中使用类型名称Maker(在行vector<Node> storage中),但因为您尚未定义Node但编译器没有知道它是什么。