我是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 */
非常感谢任何帮助:)
答案 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
未知。