2017-11-16 14 views
0

これまでdgraphオブジェクトを作成しようとしたとき、コンパイルエラーが発生しましたが、 dgraphオブジェクトを作成する行。助けてください!ありがとう。これは私のdgraph.hあるクラスオブジェクトを作成するとき、「エラー:リンカーコマンドが終了コード1で失敗しました」

#include<iostream> 
#include"dgraph.h" 
using namespace std; 
int main() 
{ 
    string test; 
    test = "Hello, world!"; 
    cout << test << endl; 
    slist L1; 
    L1.displayAll(); 
    dgraph L2; //offending line 
    return 0; 
} 

この

はmain.cppにある

#include <iostream> 
#include <string> 
#include "slist.h" 

using namespace std; 

const int SIZE = 20; 
struct Gvertex 
{ 
    char vertexName;  //the vertex Name 
    int outDegree; //the Out degree 
    slist adjacentOnes; //the adjecent vertices in an slist 
    int visit;   // This will hold the visit number in HW7 
}; 

class dgraph 
{ 

private: 
    Gvertex Gtable[SIZE]; // a table representing a dgraph 
    int countUsed; // how many slots of the Gtable are actually used 

public: 

    class BadVertex {}; // thrown when the vertex is not in the graph 

    dgraph(); 
    ~dgraph(); 
    void fillTable(); 
    void displayGraph(); 
    int findOutDegree(char); 
    slist findAdjacency(char); 
}; 

dgraph.cpp:私はG ++ -cその後、使用してコンパイルしています

#include<iostream> 
#include<fstream> 
#include"dgraph.h" 

void dgraph::fillTable() 
{ 
    ifstream fin; 
    fin.open("table.txt"); 
    while(fin >> Gtable[countUsed].vertexName) //if you can read the name 
    { 
    char x; //temp var 
    fin >> Gtable[countUsed].outDegree; 
    for (int i = 0; i < Gtable[countUsed].outDegree; ++i) 
    { 
     fin >> x; 
     Gtable[countUsed].adjacentOnes.addRear(x); 
    } 
    countUsed++; 
    } 
    fin.close(); 
} 

g ++ -oを使用してすべてのファイルをリンクします。 は、ここで私は、コンパイル時に私が得る正確なエラーです:

g++ -o run hw6Client.o dgraph.o llist.o slist.o 
Undefined symbols for architecture x86_64: 
"dgraph::~dgraph()", referenced from: 
    _main in hw6Client.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see 
invocation) 
+0

dgraph.cppについてはどうですか? –

+0

元の投稿をdgraph.cppで更新しました。 – airrrforceones

+0

'dgraph.cpp'には、ほとんどのメンバ関数の実装がありません。 – Barmar

答えて

0

ヘッダがdgraphオブジェクトを宣言しますが、実装を定義していません。実際にdgraphオブジェクトを作成していない限り、これは問題ありません。この問題は、実際にdgraphオブジェクトを宣言する問題のある行を含めると発生します。これを行うと、リンカは実際の実装をどこかで探しますが、それを見つけることはできません。リンカーがそれを見つける場所に

void dgraph::filltable() 
void dgraph::displayGraph() 
int dgraph::findOutDegree(char) 
slist dgraph::findAdjacency(char) 
dgraph::dgraph() 
dgraph::~dgraph() 

の実装を含める必要があります。明示的に宣言したので、コンストラクターとデストラクタを明示的に定義する必要があります。

+0

補遺:[The Rule of Zero](http://en.cppreference.com/w/cpp/language/rule_of_three)は、このコードがデストラクタを必要としない可能性が高いことを示しています。 – user4581301

+0

コンストラクタとfillTable関数以外のメンバ関数をすべて省略しましたが、コンパイルエラーが発生しています。 – airrrforceones

+0

コンストラクタを実装しましたか? 'dgraph :: dgraph():countUsed(0){}'などのようなものです。 – user4581301

関連する問題