0

可能重复:
c++“未定义的对'Foo::Foo(std::string)'的引用”

我有三个.cpp文件和two header files.

但是当我编译它们时,意思是Point.cpp, Data.cppand main.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.cpp, Data.cppand main.cpp,它会说

main.cpp:未定义对“PointD::PointD()”的引用 collect2:ld 返回 1 个退出状态

4

2 回答 2

3

您可能正在尝试编译和链接 main.cpp,而不使用 PointD.cpp 或 data.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;否则它将两次找到类定义。

此外,您必须添加

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

到您的 PointD.h 进行无错误编译。

希望这可以帮助!

于 2012-10-09T07:44:02.633 回答