0
構建課程時遇到問題。類「Graph」在另一個文件中導入一個類「Bag」,並使用「Bag」作爲其組件。如何在另一個C++頭文件中導入一個類?
//Graph.h
#ifndef GRAPH_H
#define GRAPH_H
#include <fstream>
#include <iostream>
#include <vector>
#include "Bag.h"
class Bag;
class Graph
{
public:
Graph(int V);
Graph(std::ifstream& in_file);
int getV() { return V; }
int getE() { return E; }
void addEdge(int v, int w);
void showadj() ;
private:
int V;
int E;
std::vector<Bag> adj;
};
#endif
而 「Bag.h」 是如下:
//Bag.h
#ifndef BAG_H
#define BAG_H
#include <vector>
#include <iostream>
class Bag
{
public:
Bag();
void addBag(int i) { content.push_back(i); }
void showBag();
private:
std::vector<int> content;
};
#endif
Graph.cpp:
//Graph.cpp
#include "Graph.h"
#include "Bag.h"
Graph::Graph(int V) : V(V), E(0)
{
for (int i = 0; i < V; i++)
{
Bag bag;
adj.push_back(bag);
}
}
Bag.cpp(對不起,忘了):
#include "Bag.h"
void Bag::showBag()
{
for (int i : content)
{
std::cout << i << " ";
}
}
當我嘗試編譯這兩個類時,出現一個錯誤:
C:\Users\ADMINI~1\AppData\Local\Temp\ccMj4Ybn.o:newtest.cpp:(.text+0x1a2): undef
ined reference to `Bag::Bag()'
collect2.exe: error: ld returned 1 exit status
你需要建立'Bag.cpp'成'Bag.o'與'Graph.o' – StoryTeller
袋聯繫起來。 cpp好奇地從這個問題中遺漏。 –
如果您從'Graph.h'中刪除'class Bag;'並從'Graph.cpp'中刪除'#include「Bag.h」',它會起作用(因爲'Graph.h'已經包含'Bag.h' )? – Aemyl