0

重複の可能性:
c++ “ 'Foo::Foo(std::string)' への未定義参照 ”

私は3つの.cppファイルを取得し、two header files.

しかし、私がそれらをコンパイルすると、 Point.cpp,Data.cppmain.cpp, と言うでしょう

main.cpp: undefined reference to "PointD::PointD()' collect2: ld returned 1 exit status 

以下は私のものData.hです:

#include <iostream>
#include <string>

using namespace std;

class Data
{
    private:
    string sType;
    public:
    Data();
    Data(string);
    void setSType(string);
    string getSType(); 
};

以下は私のものdata.cppです:

#include "Data.h"

Data::Data()
{
    sType = "";
}

Data::Data(string s)
{
    sType = s;
}

void Data::setSType(string ss)
{
    sType = ss;
}

string Data::getSType()
{
    return sType;
}

以下は私のものPointD.hです:

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

using namespace std;

class PointD
{
    private:
    int x
    Data data1;
    public:
    PointD();
    PointD(int,Data);

    void setX(int);
    void setData(Data);

    int getX();
    Data getData();
};

以下は私のものPointD.cppです:

#include "PointD.h"

PointD::PointD()
{
    x = 0;
}

PointD::PointD(int xOrdinate,Data dd)
{
    x = xOrdinate;
    data1 = dd;
}

void PointD::setXordinate(int Xordinate)
{
    x = Xordinate;
}

void PointD::setData(Data dd)
{
    data1 = dd;
};

int PointD::getXordinate()
{
    return x;
}

Data PointD::getData()
{
    return data1;
}

これは私のmain.cppです:

#include <iostream>
#include <string>

#include "Data.h"
#include "PointD.h"
using namespace std;

int main()
{
    const int MAX_NUM = 20;

    Data ldata[MAX_NUM];
    PointD pointd[MAX_NUM];

    //more codes..
}

しかし、それらをコンパイルすると、つまり 、Point.cppData.cppおよびmain.cppと表示されます

main.cpp: "PointD::PointD()" への未定義の参照 collect2: ld が 1 つの終了ステータスを返しました

4

2 に答える 2

3

PointD.cpp または data.cpp を使用せずに、main.cpp をコンパイルおよびリンクしようとしている可能性があります。コマンドにすべてのソースを追加するか、リンクする前にすべてのソースのみをコンパイルしてください。

于 2012-10-09T06:42:45.710 に答える
1

g++ が PointD および Data 定義の必要な依存関係を見つけることができなかったため、エラーがスローされています。したがって、これらのクラスは未定義の参照になります。

次のコマンドを使用してコンパイルし、main がクラス定義を見つけられるようにします。

   g++ main.cpp Data.cpp PointD.cpp -o main

発言も削除

  #include "Data.h" 

あなたのmain.cppから; そうしないと、クラス定義が 2 回検出されます。

さらに、追加する必要があります

   int getXordinate();
   void setXordinate(int Xordinate);

エラーのないコンパイルのために PointD.h に追加します。

お役に立てれば!

于 2012-10-09T07:44:02.633 に答える