<list>指向对象的指针模板参数无效

时间:2016-04-25 13:22:28

标签: c++ list templates std

我是C ++和编程的新手。我必须在课程“NAVI”中为我的课程编写一个程序,该程序存储指向列表中“Ort”类型(trans:Location)的对象的指针。 (“Navi”类还有一些功能,但忽略它们)。它必须是一个列表,即使在我的情况下向量会更有意义。

编译时遇到的错误:

In file included from Ort.h:10:0,
                 from Ort.cpp:8:
NAVI.h:40:10: error: 'Ort' was not declared in this scope
list<Ort> *n;  
      ^
NAVI.h:40:13: error: template argument 1 is invalid
 list<Ort> *n;  
         ^
NAVI.h:40:13: error: template argument 2 is invalid

我的“Navi.h”标题:

#ifndef NAVI_H
#define NAVI_H
#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include <list>
#include "Ort.h"
#include <vector>
#include <sstream>

using namespace std;

class NAVI {
public:
    NAVI();
    NAVI(const NAVI& orig);
    virtual ~NAVI();

    virtual void RouteBerechnen();

    void namenAnVektor(string n, int x);
    void namenAusVektorLoeschen(string st);
    void namenInDatei();
    void NamenEinlesen();
    void AlleAusgeben();
    void alleDatenBinaerSpeichern();
    void alleDatenBinaerLaden();
    void nachOrtSuchen(string start, string ziel);

private:


    list<Ort> *n;  
    const std::string binaerPfad = "C:\\Users\\Karsten\\Desktop\\Skripte u.     Unterlagen\\2. Semester\\PAD 2\\Praktikum\\binaerdaten.bin";
    const std::string dateiPfad = "C:\\Users\\Karsten\\Desktop\\Skripte u. Unterlagen\\2. Semester\\PAD 2\\Praktikum\\schreiben.txt";
};

#endif  /* NAVI_H */

我的“Ort.h”:

#ifndef ORT_H
#define ORT_H
#include "NAVI.h"

class Ort {
public:
    Ort(int cords,std::string n);
    Ort();
    Ort(const Ort& orig);
    virtual ~Ort();

    std::string getName();
    int getCords();
    void setCords(int cords);
    void setName(std::string n);

private:
    int GPSKoordinaten;
    std::string Ortsname;
};

#endif  /* ORT_H */

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

#include几乎就像编译器处理文件之前的复制/粘贴操作一样,这意味着即使NAVI.h列在#include Ort.h中1}},在使用Ort时,其内容不会包括在内。

如果在程序中包含Ort.h,编译器将看到以下内容:

#ifndef ORT_H
#define ORT_H
#include "NAVI.h" // ok, start with NAVI.h even though the compiler hasn't considered any of the rest of Ort.h yet

然后变为(与此答案无关的一些项目被删除):

#ifndef ORT_H
#define ORT_H
//#include "NAVI.h" // actual content of NAVI.h follows
#ifndef NAVI_H
#define NAVI_H
#include "Ort.h" // this is ignored, we already have #define ORT_H
#include <vector>
#include <sstream>

using namespace std;

class NAVI {
public:
    NAVI();
    ...
private:
    list<Ort> *n;  // Compiler hasn't seen Ort yet

因此,如果您将包含复制/粘贴到&#39;看看编译器看到了什么&#39; ,您就可以理解为什么Ort未知。